如何防止c ++中不同别名类型的组合?

时间:2018-02-12 09:21:28

标签: c++ compilation g++ warnings alias

有没有办法防止在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都未对此发出警告。

我正在寻找适用于别名类型的解决方案(我不必创建两个类TypeATypeB)。

1 个答案:

答案 0 :(得分:3)

不,这不应该是可能的。别名不是一种类型,而是一种“别名”,即同义词。这意味着他们打算从他们的别名类型中不可抗拒。类型别名没有自己的标识。

在评论中提到BOOST_STRONG_TYPEDEF实际上创建了一个新类型,它可以在编译时在函数重载等过程中区别于其他类型。

了解更多: