#include <iostream>

template< class N >
class A {       
    public:
        template< class M >
        void fun(N n, M m) {
            std::cout << "Hello World! " << n << " " << m << std::endl;
        }
};

template< class N, class M >
class B {
    public:
        void fun(N n, M m) {
        A< N > a;   // Почему если здесь вместо N написать int, то все нормально, а если как есть то ошибка?
        a.fun(n, m);
    }
};

int main() {
    B< int, int > b;
    b.fun(1, 2);
    return 0;
}
