相关疑难解决方法(0)

支撑初始化列表中是否允许使用显式转换运算符?

以下代码使用GCC 4.9.2编译,但不与Clang 3.5.0编译:

#include <string>

class Foo
{
public:
  explicit operator std::string() const;
};

std::string bar{Foo{}}; // Works in g++, fails in clang++
std::string baz(Foo{}); // Works in both
Run Code Online (Sandbox Code Playgroud)

clang ++说:

foo.cpp:9:13: error: no matching constructor for initialization of 'std::string'
      (aka 'basic_string<char>')
std::string bar{Foo{}};
            ^  ~~~~~~~
...: note: candidate constructor not viable: no known conversion from 'Foo' to
      'const std::basic_string<char> &' for 1st argument
      basic_string(const basic_string& __str);
      ^
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果std::string被替换为原始类型,它就可以工作int.

c++ gcc clang compiler-bug c++11

14
推荐指数
1
解决办法
475
查看次数

标签 统计

c++ ×1

c++11 ×1

clang ×1

compiler-bug ×1

gcc ×1