这对于clang和gcc都编译没有错误,但在MSVC中失败:(compiler explorer)
// detection idiom
template <class...>
using void_t = void;
template <class Void, template <class...> class Op, class... Args>
struct detector_base
{
using type = void;
};
template <template <class...> class Op, class... Args>
struct detector_base<void_t<Op<Args...>>, Op, Args...>
{
using type = Op<Args...>;
};
template <class T>
using check = decltype(T::x);
template <typename T>
struct type {};
using dt = typename detector_base<void, check, int>::type; // this is void
using t = type<dt>;
// ^--- 't': use of class template requires template argument list
将检测到的类型与任何模板类型一起使用时会发生这种情况。这是编译器错误,还是由于缺乏支持(如果是,为什么)?