typedef 和 using 会导致模板实例化吗?

Do typedef and using cause a template instantiation?

假设我有一个这样定义的模板class

template <typename T>
class Temp{
    // irrelevant
};

我可以隐式或显式实例化它:

Temp<int> ti;
template class Temp<char>;

通过显式实例化,我的程序应该包含一个实例,即使我以后不使用它(假设它没有被编译器优化省略)。

我的问题是,以下语句是否会导致 class 的实例化?

typedef Temp<short> TShort;
using TFloat = Temp<float>; // C++11

没有。 Implicit instantiation 仅在需要完全定义的类型时出现;而不必使用类型别名。

When code refers to a template in context that requires a completely defined type, or when the completeness of the type affects the code, and this particular type has not been explicitly instantiated, implicit instantiation occurs. For example, when an object of this type is constructed, but not when a pointer to this type is constructed.

例如以下代码需要 completely defined type,

Temp<char> tc;
new Temp<char>;
sizeof(Temp<char>);

同时

Temp<char>* ptc;

不会。