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

C++ multiple definitions of 'using' alias

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

无法从实现文件中包含 public header,因为那样会导致循环依赖。但是,我想使用在实现文件中的 header 文件中声明的模板别名。

示例:

'public' header:

using true_type = logical_constant<true>;
using false_type = logical_constant<false>;

'private' 实施文件:

using true_type = logical_constant<true>;
using false_type = logical_constant<false>;

只要两者都使用别名别名是一样的,这合法吗?这个简单的示例在 MSVC 14 中对我有用,但是当我尝试以同样的方式使用更复杂的别名时,编译器会报错。

Is it legal in C++ to declare same using alias multiple times?

是的,这是合法的。

使用 using ... = ...; 语法的 别名声明 是声明 typedef 的一种更奇特的方式。因此,只要他们不将别名声明为不同类型,就可以毫无问题地重复它。