【发布时间】:2022-01-18 05:58:56
【问题描述】:
#include <variant>
struct A;
struct B;
using C = std::variant<A, B>;
struct A
{
template <size_t n>
void fun()
{
C c;
}
};
我发布的代码是用 g++ 编译的,但不是 clang++。两者都使用-std=c++17。我不确定哪个是预期的,但希望我能解释为什么会发生这种情况,以及它是否是 g++ 规范承诺总是做的事情,或者它是否是 UB。
我的猜测是 g++ 以不同的顺序编译各种组件。模板在使用之前可能根本不会被实例化。但是为什么clang++会看到错误呢?
【问题讨论】:
-
gcc 没有诊断出 ndr BTW 的问题。