首页 > 解决方案 > 包含“x”的类的模板参数的默认参数

问题描述

有人可以告诉我这段代码出了什么问题:

template<typename S, typename T = int>
void foo() {
    extern int x;
}

GCC 5.5 和 --std=c++11 的错误消息:

test.cpp: In function 'void foo()':
test.cpp:4:16: error: default argument for template parameter for class enclosing 'x'
     extern int x;
                ^

但是,Clang 3.8 成功编译了相同的代码。

对于这个非常简单的示例,有一种解决方法可以将extern声明置于功能之外。但是对于实际代码,extern声明必须在foo范围内,因此没有变通方法。

我用谷歌搜索,发现一个7 年前报告的GCC 错误并且仍然打开。我不确定我是否遇到同样的错误

标签: c++templates

解决方案


推荐阅读