【发布时间】:2018-07-31 20:26:48
【问题描述】:
给定以下代码,
template <class> using void_t = void;
template <class C, class = void> struct X { enum { v = 0 }; };
template <class C> struct X<C, void_t<typename C::T> > { enum { v = 1 }; };
struct T { };
int main() { return X<T>::v; }
main 应该返回什么? GCC 和 MSVC 说 1,Clang 说 0。
【问题讨论】:
-
整洁的角盒。换句话说:注入的类名是否表现得像一个实际的 typedef?
-
这个问题来自于透明的比较器,类定义了一个名为
is_transparent的类型成员。struct is_transparent { };透明吗?当编译器不同意时,我们感到很惊讶。 -
一个恰当的问题会列出并解释一段神秘代码的可能解释。
-
@n.m. language-lawyer 关于哪个编译器正确的问题与其说是对代码的解释,不如说是对标准的解释。
标签: c++ language-lawyer c++17