Updated Answer
Okay, so as dyp points out, I and everyone else was wrong. You can achieve what you want to do by = default
with the default constructor:
Wrapper() = default ;
^^^^^^^^^
This works because without an initializer you obtain the same behavior I outline before but when you use value initialization the behavior changes as outlined in paragraph 8:
— if T is a (possibly cv-qualified) non-union class type without a user-provided or deleted default constructor, then the object is zero-initialized and, if T has a non-trivial default constructor, default-initialized;
Original Answer
I don't think there is a way to make this work the way you would like. Class types act differently that builtin types we can see this from the draft standard section 8.5
Initializers paragraph 12 which says (emphasis mine going forward):
If no initializer is specified for an object, the object is default-initialized; if no initialization is performed, an object with automatic or dynamic storage duration has indeterminate value. [ Note: Objects with static or thread storage duration are zero-initialized, see 3.6.2. —end note ]
and we can see this has different results for classes than built-in types from paragraph 7 which says:
To default-initialize an object of type T means:
and includes the following bullets:
— if T is a (possibly cv-qualified) class type (Clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, no initialization is performed.
and if we look at paragraph 11 for the second case Wrapper<unsigned int>()
it says:
An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
and then back to paragraph 8:
To value-initialize an object of type T means:
— if T is a (possibly cv-qualified) class type (Clause 9) with either no default constructor (12.1) or a default constructor that is user-provided or deleted, then the object is default-initialized; [...]
So we end up with the same behavior.
Both Praetorian and aschepler gave you options that work slightly differently but appear to achieve the behavior you would like just not with the same syntax.