#include <iostream>
template<class X>
class Foo
{
public:
Foo(const std::initializer_list<X> &A) { std::cout << "Foo:: initializer_list" << std::endl; }
Foo(size_t n) { std::cout << "Foo:: size_t" << std::endl; }
};
class Bar
{
public:
Bar() { std::cout << "Bar:: default" << std::endl; };
Bar(const Foo<size_t> &A, bool a = true, bool b = true) { std::cout << "Bar:: Foo, (bool, bool)" << std::endl; };
};
int main()
{
Bar{ }; // Bar:: default
Bar{ 1 }; // Foo:: size_t, Bar:: Foo, (bool, bool)
Bar{ 1, 1 }; // Foo:: size_t, Bar:: Foo, (bool, bool)
Bar{ 1, 1, 1 }; // Foo:: size_t, Bar:: Foo, (bool, bool)
Bar{ {1, 2, 3} }; // Foo:: initializer_list , Bar:: Foo, (bool, bool)
Bar{ { 1, 2, 3 }, 1 }; // Foo:: initializer_list , Bar:: Foo, (bool, bool)
Bar{ { 1, 2, 3 }, 1, 1 }; // Foo:: initializer_list , Bar:: Foo, (bool, bool)
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y2xhc3MgWD4KY2xhc3MgRm9vCnsKcHVibGljOgoJRm9vKGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxYPiAmQSkgeyBzdGQ6OmNvdXQgPDwgIkZvbzo6IGluaXRpYWxpemVyX2xpc3QiIDw8IHN0ZDo6ZW5kbDsgfQoJRm9vKHNpemVfdCBuKSB7IHN0ZDo6Y291dCA8PCAiRm9vOjogc2l6ZV90IiA8PCBzdGQ6OmVuZGw7IH0KfTsKCmNsYXNzIEJhcgp7CnB1YmxpYzoKCUJhcigpIHsgc3RkOjpjb3V0IDw8ICJCYXI6OiBkZWZhdWx0IiA8PCBzdGQ6OmVuZGw7IH07CglCYXIoY29uc3QgRm9vPHNpemVfdD4gJkEsIGJvb2wgYSA9IHRydWUsIGJvb2wgYiA9IHRydWUpIHsgc3RkOjpjb3V0IDw8ICJCYXI6OiBGb28sIChib29sLCBib29sKSIgPDwgc3RkOjplbmRsOyB9Owp9OwoKaW50IG1haW4oKQp7CglCYXJ7IH07IC8vIEJhcjo6IGRlZmF1bHQKCUJhcnsgMSB9OyAvLyBGb286OiBzaXplX3QsIEJhcjo6IEZvbywgKGJvb2wsIGJvb2wpCglCYXJ7IDEsIDEgfTsgLy8gRm9vOjogc2l6ZV90LCBCYXI6OiBGb28sIChib29sLCBib29sKQoJQmFyeyAxLCAxLCAxIH07IC8vIEZvbzo6IHNpemVfdCwgQmFyOjogRm9vLCAoYm9vbCwgYm9vbCkKCUJhcnsgezEsIDIsIDN9IH07IC8vIEZvbzo6IGluaXRpYWxpemVyX2xpc3QgLCBCYXI6OiBGb28sIChib29sLCBib29sKQoJQmFyeyB7IDEsIDIsIDMgfSwgMSB9OyAvLyBGb286OiBpbml0aWFsaXplcl9saXN0ICwgQmFyOjogRm9vLCAoYm9vbCwgYm9vbCkKCUJhcnsgeyAxLCAyLCAzIH0sIDEsIDEgfTsgLy8gRm9vOjogaW5pdGlhbGl6ZXJfbGlzdCAsIEJhcjo6IEZvbywgKGJvb2wsIGJvb2wpCn0=