有没有办法防止在c ++中混合实际引用相同底层类型的两种不同别名类型?
例如,我想为g++
获取以下(虽然有效)程序的编译警告:
using TypeA = float;
using TypeB = float;
void foo(TypeA a) {}
int main()
{
TypeB b;
foo(b); // valid but how to get a warning?
return 0;
}
不幸的是,-Wall
,-Wextra
或-pedantic
都未对此发出警告。
我正在寻找适用于别名类型的解决方案(我不必创建两个类TypeA
和TypeB
)。
答案 0 :(得分:3)
不,这不应该是可能的。别名不是一种类型,而是一种“别名”,即同义词。这意味着他们打算从他们的别名类型中不可抗拒。类型别名没有自己的标识。
在评论中提到BOOST_STRONG_TYPEDEF实际上创建了一个新类型,它可以在编译时在函数重载等过程中区别于其他类型。
了解更多: