c ++:在函数参数列表中使用或不使用命名空间

时间:2016-05-04 08:38:36

标签: c++ c++11 visual-c++

考虑这样一个简单的例子:

namespace foo {
    struct Foo {};
    struct Boo {
        void f(Foo);
    };
}

using foo::Boo;

void Boo::f(Foo)
{

}

clanggcc编译此类代码时没有错误(-pedantic -std=c++11), 但VC++-2015报告了Foo - void Boo::f(Foo)下方标识符中Foo类型的错误。如果像这样重写代码:void Boo::f(foo::Foo)它编译得很好,但是在重写之后它还编译了有趣的内容:

namespace foo {
    struct Foo {};
    struct Boo {
        void f(Foo);
    };
}

void foo::Boo::f(Foo)
{

}

根据VC++2015标准,它是c++11错误吗?

1 个答案:

答案 0 :(得分:3)

不,这不是MSVC错误。您应该正确地命名您的标识符。