【发布时间】:2016-09-09 10:44:09
【问题描述】:
我曾经相信'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;
}
输出是“真真真假”。
但在我看来,'has_typedef_X<B>::value' 给出 'true' 意味着在结构 B 中,X 是 'typedef'ed。
那么如果有人能解释一下这个问题或纠正我吗?
在线版本可在http://melpon.org/wandbox/permlink/iwZ6eZ3PoBPgyFBj [URL 更正]
【问题讨论】:
-
T::X在B_中不明确,因此false,您的链接似乎已损坏 -
@PiotrSkotnicki 谢谢。我已经更新了网址。我的问题是 struct B,我曾经认为其中没有 X 类型定义。
-
“我以前认为'typedef'不会自动继承。”嗯,错了。