从这里:
struct piecewise_construct_t {}; constexpr piecewise_construct_t piecewise_construct = {}; const int magic_number = 42; inline std::tuple<int> make_magic() { return std::tuple<int>( piecewise_construct, magic_number ); }
此函数违反了 ODR([basic.def.odr] §3.2/6 )两次,因为构造函数 2 参数都没有接收左值到右值的转换。因此它们通过地址传递,但地址取决于 TU,因为 const(和 constexpr)意味着内部链接。
我最初认为它确实如此,但问题是它magic_number
具有内部联系。既然它具有内部链接,那么它是否本质上不会将magic_number
它们视为不同翻译单元中的不同变量,因此不视为同一变量的多个定义?有人可以通过引用 C++ 标准的最新工作草案来指定这一点吗?