use*_*522 12 c++ one-definition-rule template-instantiation implicit-instantiation
即使任何构造函数都没有使用默认成员初始值设定项,在默认成员初始值设定项中使用仍然是 odr 使用吗?
例如,该程序是否格式错误,因为g<A>使用了 odr,因此其定义被隐式实例化?
template<typename T>
void g() { sizeof(T); }
struct A;
struct B {
B() : i{} {};
int i = (&g<A>, 0);
};
int main() { }
Run Code Online (Sandbox Code Playgroud)
MSVC 认为不会。Clang、GCC 和 ICC 认为是的。https://godbolt.org/z/zrr9oEdfe