外部链接模板对象错误
external linkage template object eror
下面的代码在clang++ -std=c++1y中编译良好,而在g++ -std=c++1y
中同样给出错误#include <iostream>
using namespace std;
class Demo {
public:
Demo(){}
};
template <Demo const &ref>
void fun(){}
Demo g;
const Demo g_c;
int main(){
fun<g>();
fun<g_c>();
};
error: the value of ‘g_c’ is not usable in a constant expression
fun<g_c>();
^
error: ‘g_c’ is not a valid template argument for type ‘const Demo&’ because object ‘g_c’ has not external linkage
fun<g_c>();
^
const Demo g_c;
有内部联动吗??这是否意味着g++在我的分析中有bug或错误??
const Demo g_c;
有内部联动吗??
正确的。(非局部)const
限定的对象具有内部链接,除非声明或更早的声明显式地为其提供外部链接。
你的分析肯定是错误的。GCC的错误告诉您,除非这些对象具有外部链接,否则对对象的引用不能用作模板参数。你的对象没有外部链接,所以GCC的错误与它实际检查的是一致的。这是否意味着g++在我的分析中有bug或错误??
但这也意味着g++有一个bug。它执行的规则来自c++ 03。c++ 11放宽了该规则,您的代码现在是有效的。这是一个已知的错误。
你可以通过给你的对象外部链接来解决这个问题:
extern const Demo g_c;
const Demo g_c;
或
extern const Demo g_c {};
相关文章:
- 对象错误地显示为引用?
- 调用带有指针对象错误的指针变量
- 为什么谷歌测试/模拟显示 std::unique_ptr 泄露的模拟对象错误?
- C 数组指向对象错误
- C++:对象错误的多重定义
- 子数组分配:使用聚合对象错误的预期"{...}"进行初始化
- C 字符串对象错误字符
- 声明 Windows API 结构 (DCB) 的对象 - 错误 C4430:缺少类型说明符 - 假定为 int
- 无法调用成员函数而不出现对象错误
- C++指针/对象错误
- C++排序矢量对象错误
- C++:在映射中存储类对象(错误:获取类型为"Node"的临时对象的地址)
- 使用三元运算符初始化类对象错误
- 帧缓冲区对象错误
- 实例化新对象 - 错误
- C++打印出对象错误
- 如何更正类型对象错误
- 简单指针对象错误C++
- 运算符重载添加两个对象错误
- c++列表对象错误