Why does g++5 deduces object instead of initializer_list in auto type deduction

后端 未结 1 1023
萌比男神i
萌比男神i 2020-12-11 04:39

I recently came upon this code:

struct Foo{};

int main() 
{
    Foo a;
    // clang++ deduces std::initializer_list
    // g++5.1 deduces Foo
    auto b{a};         


        
相关标签:
1条回答
  • 2020-12-11 05:41

    There is a proposal for C++1z that implements new type deduction rules for brace initialization (N3922), and I guess gcc implemented them:

    For direct list-initialization:
    1. For a braced-init-list with only a single element, auto deduction will deduce from that entry;
    2. For a braced-init-list with more than one element, auto deduction will be ill-formed.

    [Example:

    auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list<int>
    auto x2 = { 1, 2.0 }; // error: cannot deduce element type
    auto x3{ 1, 2 }; // error: not a single element
    auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
    auto x5{ 3 }; // decltype(x5) is int. 
    

    -- end example]

    Here is the gcc patch concerning the new changes with regards to "Unicorn initialization."

    0 讨论(0)
提交回复
热议问题