2
我很难理解这些编译错误的来源。将lambda作为成员使用成员初始值设定项列表时出现VC++ 2013错误
下面的代码编译,而不在GCC-4.9.3和铛 - 3.8任何问题,但2013年
class Sample
{
public:
template<typename T>
explicit Sample(T& in) :
x(in),
lamb([](Sample& ss)
{
std::cout << "This works !!\n" << static_cast<const T&> (ss.get()) << std::endl;
}){}
const int get() const { return x; }
private:
int x;
std::function<void(Sample&)> lamb;
};
int main()
{
int z = 10;
Sample a(z);
return 0;
}
我结束了以下错误的VS失败:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2061: syntax error : identifier 'T'
的MSDN对这些错误的解释并没有多大帮助。我在这里做错了什么?
[编译](http://melpon.org/wandbox/permlink/OAkFvu1qV9ESP7Pc)[无](http://melpon.org/wandbox/permlink/LUNHOZZie6GL93E9)任何问题](http://melpon.org/wandbox/permlink/THuTNjFlnhTnokAB)。 –
哎呀... :) :)我用一个确实编译好gcc和clang的代码更新了这个问题。在VS 2013仍然错误。 – Recker
http://webcompiler.cloudapp.net/使用VS,它显示了实际的错误消息,它使得它清楚,lambda不能使用构造函数的模板参数T(与静态转换的行)作为至于是否应该,我会和clang和gcc一起去,但这是个人意见,没有理由。 –