here:



我最初以为是这样,但是问题是magic_number具有内部链接。由于它具有内部链接,因此它是否实质上就不会将magic_number视为它们是不同翻译单元中的不同变量,因此不将其视为同一变量的多个定义吗?有人可以使用C++标准最新工作草案的引号来指定吗?

最佳答案

问题出在make_magic上。 [basic.def.odr]/p6:



因为piecewise_constructmagic_number具有内部链接,所以当在多个翻译单元中定义内联函数make_magic时,名称piecewise_constructmagic_number引用了不同的实体-TU 1的make_magic将引用TU 1的piecewise_constructmagic_number,而TU 2的make_magic将引用TU。 2的piecewise_constructmagic_number。由于存在问题的tuple的构造函数通过引用获取参数,因此不执行左值到右值转换,对象被奇数次使用,第二个项目符号中的异常不适用,并且您违反了ODR。

(顺便说一句,std::tuple没有piecewise_construct构造函数,无论如何,这样的构造函数可能会以元组作为参数,而不是简单的int,但这与本文试图提出的观点正交。)

关于c++ - 以下内容是否确实违反了ODR?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31643595/

10-12 04:53