Re:C++ Patterns: The Badge
by a1369209993 on Wednesday June 12, 2019 @05:36PM
(#20169585)
No, that's a good feature of the C++ type system, because it (effectively) allows the programmer to construct a value of type Badge<Device>, even if Device thinks it's okay to prevent that.
It would be better to do eg "return Device::private:get_badge()", but C++ defectively doesn't support that.
The rule should be that if the default constructor of T is not accessible in the scope, then any cast to T * or T & requires a diagnostic. Or something like that.
If I can allocate a suitably aligned buffer of sizeof (T) zeros, and then treat that as a T, I've effectively constructed a T.