C++ 'using' 别名的多重定义

Ale*_*ily 7 c++ templates using

using在 C++ 中多次声明相同的别名是否合法?我有一个模板库,其中一个头文件用作“公共” - 它包含所有模板类声明和别名,然后是“实现”文件(不是字面意义上的,这些包含模板类的定义)。公共头文件在其末尾包含所有实现头文件。

不可能包含实现文件中的公共标头,因为这会导致循环依赖。但是,我想使用在实现文件内的头文件中声明的模板别名。

例子:

“公共”标头:

using true_type = logical_constant<true>;
using false_type = logical_constant<false>;
Run Code Online (Sandbox Code Playgroud)

“私人”实施文件:

using true_type = logical_constant<true>;
using false_type = logical_constant<false>;
Run Code Online (Sandbox Code Playgroud)

只要两者使用别名alias相同的东西,这合法吗?这个简单的例子在 MSVC 14 中对我有用,但是当我尝试以同样的方式使用更复杂的别名时,编译器会抱怨。

R S*_*ahu 6

在 C++ 中多次使用别名声明相同内容是否合法?

是的,这是合法的。

使用语法进行别名声明using ... = ...;声明typedef. 因此,只要它们不将别名声明为不同的类型,就可以毫无问题地重复它。