%module xxx namespace Space { template struct ForwardDeclaredTemplate; %template(ForwardDeclaredTemplate_double) ForwardDeclaredTemplate; template struct ForwardDeclaredSpecialized; %template(ForwardDeclaredTemplate_int) ForwardDeclaredSpecialized; // no primary defined %template(ForwardDeclaredTemplate_double) ForwardDeclaredSpecialized; // needs to be after the specialized template definition. template <> struct ForwardDeclaredSpecialized { void specialized(const ForwardDeclaredSpecialized& other) { } }; template struct ForwardDeclaredMisplacedPrimary; %template(ForwardDeclaredTemplate_double) ForwardDeclaredMisplacedPrimary; // needs to be after the primary template definition. template struct ForwardDeclaredMisplacedPrimary { void primary(const ForwardDeclaredMisplacedPrimary& other) { } }; }