2014-07-01 43 views
6

Derleyicim, C++ 14 ve std::forward_list'u tamamen destekleyen bir clang 3.4.Neden {}; `std :: forward_list` için geçerli değil?

#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 {}; // ??? 
} 

Neden return {};std::forward_list için geçerli değildir?

cevap

18

Eh, senin derleyici C++ 14 uyumlu olsa bile, standart kütüphane değil :)

C++ 11 etti:

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

C++ 14 sahiptir oysa () library DR2193 tarihi:

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

Eğer explicit A(char* = nullptr) için A 'ın varsayılan kurucuyu değiştirirseniz aynı davranışı göreceksiniz.

İlgili konular