c++ - 包含“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 错误并且仍然打开。我不确定我是否遇到同样的错误
解决方案
推荐阅读
- java - 原因:无法在未调用 Looper.prepare() 的线程上敬酒
- node.js - package.json 依赖项在我的本地 Windows 主机上不起作用,但它在 docker 中起作用 为什么?
- html - 您如何使图像和文本的大小变小但仍将其并排放置?
- web-scraping - 列出指数超出范围的沃尔玛评级
- model-view-controller - syncfusion ASP.NET Core 图表控件禁用点击事件
- unity3d - 如何在Unity中为“GraphicRaycaster”在多个“Canvas”上“Raycast”?
- javascript - 在函数中声明变量和在javascript中事件监听器的回调函数有什么区别
- user-interface - 如何在 twincat3 中创建多页 HMI 项目?
- json - 线程 4:致命错误:“尝试!” 表达式意外引发错误
- swift - Swift flatMap 错误表达式类型不明确,没有更多上下文