This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Initializer List Ctor


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]