在尝试为 C++17 中的结构化绑定专门化自定义类的 tuple_size
/tuple_element
时,我遇到了这个问题。
下面的代码在 GCC 中可以编译,但在 clang 中无法编译(两个版本都是 trunk 版本,请参见下面的链接)。
#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
这是编译器中的一个错误吗?还是上述代码引发了一些未定义行为?