【发布时间】:2012-09-21 23:47:03
【问题描述】:
这个小测试程序:
#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 错误?
编辑 看起来像一个错误。我已经提交了bug report
【问题讨论】:
-
默认类怎么可能是
void? -
在此上下文中,
class与typename相同 - 一种类型。您可以将void替换为任何其他类型。 -
即使实际实例化模板,clang 也可以吗?
-
@6502 - 是的,如果我在
main中添加c<int> t;,则可以使用clang -
只是因为你语法错误!如果您尝试创建结构的实例,您将收到错误。