我注意到来自cppreference page的这些奇怪的代码。 (运行here)。
我对template <class T> char test(int T::*);
感到困惑(第6行)。什么int T::*
是什么意思?它是否正确表示类型?
#include <iostream>
//#include <type_traits>
namespace my_impl {
namespace detail {
template <class T> char test(int T::*);
struct two { char c[2]; };
template <class T> two test(...);
}
template <class T>
struct is_class : std::integral_constant<bool, sizeof(detail::test<T>(0))==1
&& !std::is_union<T>::value> {};
}
using my_impl::is_class;
struct A {};
class B {};
enum class C {};
int main()
{
std::cout << std::boolalpha;
std::cout << is_class<A>() << '\n';
std::cout << is_class<B>() << '\n';
std::cout << is_class<C>() << '\n';
std::cout << is_class<int>() << '\n';
}
答案 0 :(得分:1)
int T::*
被称为成员指针,它是指向int
的指针,但指向int
指针T
的成员。如果T
是一个类,这只是一个有效的表达式。