why in enable_if is only condition without indicating second template
parameter ?
Because the default void
is just fine.
What type is "type*" then ? void* ? if so, why ?
Yes, ::type
will be of type void
if std::is_trivially_destructible<T>::value == true
, this will result in ::type*
-> void*
.
Why is it pointer ?
So we can easily give it a default value of 0
.
All we're using std::enable_if
for is to check for certain attributes (in this case checking if T
is trivially destructible), if these result in false
then we use it to create ill-formed code and thus eliminate this function from overload resolution.
If std::is_trivially_destructible<T>::value == false
then ::type
will not exist and thus the code will be ill-formed. In SFINAE this is handy since this overload will then not be considered for resolution.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…