Initializer List Ctor

Jonathan Wakely jwakely.gcc@gmail.com
Tue Sep 5 15:03:00 GMT 2017


On 5 September 2017 at 14:06, Julius Witte wrote:
> In a class such as this one:
>
> #include <initializer_list>
> class A
> {
> public:
>   A(int i, double d){}
>   A(std::initializer_list<double> l){}
> };
>
> why an instantiation with curly braces as this one
>
> int main()
> {
>   A a{2,2.} ;
> }
>
> shall default to the initializer list constructor?

Because that's what the C++ standard says must happen. GCC just
follows the standard.


> I understand why a call like "A a{2.,2.}" would default to it,
>
> but in my eyes it would make more sense to default
>
> to the first constructor when the types match it exactly.

The rule is that a non-empty braced-init-list will prefer an
initializer-list constructor if it's viable. {2, 2.} can be converted
to std::initializer_list<double> so that's what happens.



More information about the Gcc-help mailing list