2017-11-07 8 views
3

私はcppreference pageからこれらの奇妙なコードに気づいた。 (実行するhere)。「T :: *」とはどういう意味ですか? - 奇妙なスコープの解像度演算子

私は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

int T::*メンバーポインタと呼ばれ、それがintのが、クラスTのメンバーだintへのポインタです。 Tがクラスの場合、これは有効な式です。

関連する問題