Cafte, potrbujem umozit inicializovat template triedu inou triedou ktora je len deklarovana, ale nie je este definovana.
Mam nasledovny kod:
struct Root; //deklaracia Root
template <class T = int>
struct TypeX{
template <class U = Root>
TypeX(typename std::enable_if<std::is_base_of<Root, U>::value, Root>::type& x){
x.fnc(); //volam funkciu z Root, cize Root musy byt definovany
}
template <class U>
TypeX(const TypeX<U>& x){} //obycajny kopirovaci konstruktor
};
struct Root{ //definicia Root
void fnc(){}
};
int main(){
Root x;
TypeX<> cB(x);
}
Ak v 1. konstruktore vyneham defaultny typ Root, tak dedukcia typu zlyha a prgram sa neprelozi.
Ak tam je defaultny typ Root, tak vsetko funguje ok, len by zaujimalo ci je podla standartu to, ze ak zlyha dedukcia typu tak sa pouzie defaultny typ pripadne ci sa to da riesit inym sposobom?