私は 'typedef'が自動的に継承されないと信じていました。しかし、以下のコードスナップは、何か異なることを示唆しています。C++クラスで自動的に 'typedef'が継承されていますか?
#include <iostream>
#include <type_traits>
struct A
{
typedef int X;
};
struct A_
{
typedef char X;
};
struct B : A {};
struct B_ : A, A_ {};
template< typename ... Ts >
using void_t = void;
template< typename T, typename = void >
struct has_typedef_X : std::false_type {};
template< typename T >
struct has_typedef_X< T, void_t<typename T::X> > : std::true_type {};
int main()
{
std::cout << std::boolalpha;
std::cout << has_typedef_X<A>::value << std::endl;
std::cout << has_typedef_X<A_>::value << std::endl;
std::cout << has_typedef_X<B>::value << std::endl;
std::cout << has_typedef_X<B_>::value << std::endl;
return 0;
}
出力は 'true true true false'です。 私の見解では、 'has_typedef_X<B>::value
'は '真'を示しているので、構造体BではXはtypedefされています。
誰でもこの問題を説明したり、私を修正したりできますか?
オンライン版がhttp://melpon.org/wandbox/permlink/iwZ6eZ3PoBPgyFBjで利用可能である
'T :: X'は' B_'であいまいです。リンクが壊れているようです –
@PiotrSkotnickiありがとうございます。 URLを更新しました。私の問題は構造体Bです。私はそこに型定義されたXがないと信じていました。 –
* "私は 'typedef'が自動的に継承されないと信じていました。*まあ、間違っています。 –