我曾经相信'typedef'不会自动继承。但下面的代码表明了不同的东西。'typedef'在C++类中自动继承吗?
#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'ed。
所以,如果任何人都可以请解释这个问题或纠正我?
一个在线版本可在http://melpon.org/wandbox/permlink/iwZ6eZ3PoBPgyFBj [URL改正]
'T :: X'在'B_'中含糊不清,因此'false'和你的链接似乎破了 –
@PiotrSkotnicki谢谢。我更新了网址。我的问题是结构B,我曾经相信那里没有X typedefed。 –
*“我曾经相信'typedef'不会自动继承。”*那是错误的。 –