我正在尝试使用clang编译C ++ 17代码库,但是clang崩溃并出现段错误。如果我使用这种简单的结构,则在支持c ++ 17的所有版本上,clang仍然会崩溃。我想知道test::asame
的声明是否有问题?看起来这些模板静态constexpr变量是导致clang崩溃的原因:
#include<type_traits>
using namespace std;
struct A{};
struct B{};
template<class U>
struct test{
template<class T>
static constexpr bool asame =is_same_v<T,U> ;
using type = conditional_t< asame<A> ,B ,A>;
static constexpr bool asameA =test<U>::asame<A> ;
};
static_assert(test<A>::asameA); //=> static expression is not an integral constant expression
static_assert(test<B>::asameA); //=> static expression is not an integral constant expression
static_assert(is_same_v<A,typename test<A>::type>); //=> ok, but
static_assert(is_same_v<B,typename test<A>::type>); //=> also ok! -> then clang crash in real code base