这个小测试程序:
#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() {};
Clang-3.2 可以编译,但是从 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 错误?
编辑 看起来像一个错误。我已经提交了错误报告