相关疑难解决方法(0)

g ++ rejects,clang ++接受:foo(x)("bar")("baz");

前几天有人曾过为什么有些东西会与clang编译,而不是与gcc编译.我直观地理解了发生了什么,并且能够帮助这个人,但它让我想知道 - 根据标准,哪个编译器是正确的?这是代码的简化版本:

#include <iostream>
#include <string>

class foo
{
public:
    foo(const std::string& x):
        name(x)
    { }
    foo& operator()(const std::string& x)
    {
        std::cout << name << ": " << x << std::endl;
        return (*this);
    }
    std::string name;
};

int main()
{
    std::string x = "foo";
    foo(x)("bar")("baz");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用clang ++可以很好地编译,但是g ++会出现以下错误:

runme.cpp: In function ‘int main()’:
runme.cpp:21:11: error: conflicting declaration ‘foo x’
    foo(x)("bar")("baz");
        ^
runme.cpp:20:17: error: ‘x’ has a previous declaration as ‘std::string x’
    std::string x = …
Run Code Online (Sandbox Code Playgroud)

c++ syntax g++ most-vexing-parse clang++

25
推荐指数
2
解决办法
514
查看次数

标签 统计

c++ ×1

clang++ ×1

g++ ×1

most-vexing-parse ×1

syntax ×1