gpt4 book ai didi

c++ - 外部链接模板对象错误

转载 作者:行者123 更新时间:2023-11-28 02:20:38 33 4
gpt4 key购买 nike

下面的代码在 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>();

};

g++ 错误

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 演示 g_c;
有内部链接吗??这是否意味着 g++ 在我的分析中有错误或错误?

最佳答案

const Demo g_c;
has internal linkage right ??

正确。一个(非本地)const 限定的对象具有内部链接,除非声明或更早的声明明确地赋予它外部链接。

does it mean g++ has bug or something wrong in my analysis ??

你的分析肯定是错误的。 GCC 的错误是告诉您对对象的引用不能用作模板参数,除非这些对象具有外部链接。您的对象没有外部链接,因此 GCC 的错误与它实际检查的内容相符。

但这也意味着 g++ 有一个错误。它执行的规则来自 C++03。 C++11 放宽了规则,您的代码现在有效。这是 a known bug .

您可以通过为您的对象提供外部链接来解决它:

extern const Demo g_c;
const Demo g_c;

extern const Demo g_c {};

关于c++ - 外部链接模板对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32673844/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com