Why does `return {};` not apply to `std :: forward_list`?

My compiler is clang 3.4, which fully supports C ++ 14 and std::forward_list .

 #include <forward_list> struct A { A() {} explicit A(initializer_list<int>) {} }; A f1() { return A(); // OK } A f2() { return {}; // OK } typedef std::forward_list<int> T; T f3() { return T(); // OK } T f4() { // error : converting to 'T {aka std::forward_list<int>}' from initializer // list would use explicit constructor 'std::forward_list' return {}; // ??? } 

Why return {}; not related to std::forward_list ?

+6
source share
1 answer

Well, even if your compiler is compatible with C ++ 14, your standard library is not :)

C ++ 11 has:

 explicit forward_list( const Allocator& alloc = Allocator() ); 

whereas C ++ 14 has (with the DR2193 library ):

 forward_list() : forward_list( Allocator() ) {} explicit forward_list( const Allocator& alloc ); 

If you change the default constructor of A to explicit A(char* = nullptr) , you will see the same behavior.

+18
source

Source: https://habr.com/ru/post/971592/


All Articles