我碰到这个问题,而试图专注tuple_size
/ tuple_element
自定义类在C ++ 17的结构结合。
下面的代码在GCC中编译,但在clang中不编译(两个主干版本,请参见下面的链接)。
#include <type_traits>
template<typename T, typename... Ts>
using sfinae_t = T;
template<typename T, bool... Bs>
using sfinae_v_t = sfinae_t<T, typename std::enable_if<Bs>::type...>;
template <typename T>
struct Test;
template <typename T>
struct Test<sfinae_v_t<T, std::is_integral_v<T>>> {};
void f() {
Test<int> t;
}
这是clang提供的错误:
<source>:13:8: error: class template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list
struct Test<sfinae_v_t<T, std::is_integral<T>::value>> {};
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Compiler returned: 1
这是编译器中的错误,还是以上代码调用了一些UB?
gcc
编译它令人惊讶,因为它没有编译它 ……