这个非常简单的代码在GCC 6.0中出错:
template<class T>
struct S {
// error: cannot convert 'T' to 'const int' in initialization
static const int b = T{};
};
int main() {
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我使用常规大括号(T()),那么代码就会编译.这是一个错误吗?代码在clang中编译得很好.
有效的原因T()是编译器将其解释为不带参数的函数声明。只需显式转换即可完成编译:
static const int b = (const int) T{};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |