Question

Considérez le code suivant:

#include <iostream>

template<class T>
struct outer {
    struct inner {};
};

template<class T>
std::ostream& operator<<(std::ostream & stream, 
                         typename outer<T>::inner const& value) {
    std::cout << "An outer::inner!";
    return stream;
}

int main() {
    outer<float>::inner foo;

    std::cout << foo << std::endl; // does not compile
}

Cela ne compile pas, parce que typename outer<T>::inner est contexte nondeduced (comme expliqué ici ), ce qui signifie le type de modèle argument ne peut être déduit par le compilateur (lu

scroll top