Разрешены ли явные операторы преобразования в списках фигурных инициализаторов?

Следующий код компилируется с 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

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);
      ^

Любопытно, что это работает, еслиstd::string заменяется на примитивный тип, какint.

Ответы на вопрос(3)

Ваш ответ на вопрос