struct Foo
{
explicit Foo(int a):m(a){}
int padd1, m, padd2;
};
void Bar(Foo){}
int main()
{
Bar(11); // OK, gives error
auto x = static_cast<Foo>(37);
x.m;
}
Это нормально, что static_cast
построить Foo
объект, даже если его конструктор помечен explicit
?Явный конструктор и static_cast
Он работает в MSVC2013 и GCC http://ideone.com/dMS5kB
Возможный дубликат [Когда выполняются броски, вызывающие конструктор нового типа?] (Http://stackoverflow.com/questions/6260989/when-do-casts-call-the-constructor-of-the-new- тип) –