这个小测试程序:带有非静态lambda成员的类不能使用默认模板参数?
#include <functional>
//template<class T> // <-- with this, gcc compiles ok
template<class T=void>
struct c{
std::function<int(int)> f = [](int i){return i+i;};
};
int main() {};
锵-3.2编译就OK了,但是从GCC 4.7.1和4.8我得到奇怪的错误:
t.cc:6:31: error: default argument for template parameter for class enclosing ‘struct __lambda0’
function<int(int)> f = [](int i){return i+i;};
^
这是一个模糊的那些C++规则没有人知道的例外或是GCC错误?
编辑 看起来像一个错误。我已经提交bug report
默认类怎么能'void'? –
在这种情况下'class'的意思与'typename'相同 - 一种类型。你可以用任何其他类型来替换'void'。 –
即使你真的实例化模板,它在叮当中是否可以? – 6502