#include <iostream>
struct Outer
{
template<typename T>
struct Inner
{
};
void f()
{
Inner<int> i1;
Inner<double> i2;
}
};
int main()
{
Outer o;
o.f();
}
template<>
struct Outer::Inner<double>
{
};
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IE91dGVyCnsKCXRlbXBsYXRlPHR5cGVuYW1lIFQ+CglzdHJ1Y3QgSW5uZXIKCXsKCX07CgkKCXZvaWQgZigpCgl7CgkJSW5uZXI8aW50PiBpMTsKCQlJbm5lcjxkb3VibGU+IGkyOwoJfQp9OwoKaW50IG1haW4oKQp7CglPdXRlciBvOwoJby5mKCk7Cn0KCnRlbXBsYXRlPD4Kc3RydWN0IE91dGVyOjpJbm5lcjxkb3VibGU+IAp7Cn07Cg==
prog.cpp: In member function ‘void Outer::f()’:
prog.cpp:12:14: warning: unused variable ‘i1’ [-Wunused-variable]
Inner<int> i1;
^
prog.cpp:13:17: warning: unused variable ‘i2’ [-Wunused-variable]
Inner<double> i2;
^
prog.cpp: At global scope:
prog.cpp:24:15: error: specialization of ‘Outer::Inner<double>’ after instantiation
struct Outer::Inner<double>
^
prog.cpp:24:15: error: redefinition of ‘struct Outer::Inner<double>’
prog.cpp:6:9: error: previous definition of ‘struct Outer::Inner<double>’
struct Inner
^