Witam!
Czytam ostatnio artykuł o generycznym singletonie i trafiłem tam na fragment kodu, który niestety nie bardzo rozumiem. Prosiłbym o wytłumaczenie jego dokładnego działania. Tutaj kod:
namespace std
{
template <typename T>
struct is_default_or_protected_constructible
{
struct X : T {};
static const auto value = std::is_default_constructible<X>::value;
};
}
Chodzi szczególnie o fragment:
struct X : T {}
Podany kod ma rozstrzygać czy dany typ umożliwia zainicjowanie instancji klasy przez konstruktor domyślny. is_default_constructible<X> mówi nam tylko o konstruktorach znajdujących się w sekcji public klasy. Dlaczego zatem po odziedziczeniu z takiej klasy (w tym wypadku T) nagle możemy dowiedzieć się czegoś dodatkowego o jej konstruktorach, które do tej pory były protected?