I have a trouble with code below:
template<typename Name>
class Person;
template<typename Name, typename FamilyNmae>
class Person {};
template<typename Name, typename FamilyName>
class Person < Name(FamilyName) >
{
public:
   Person(Name a)
      : k{ a }
   {
   }
private:
   Name k;
   FamilyName l;
};
This code does not compile (C2977 'Person': too many template arguments), but if I do next:
template<typename Name>
class Person;
//template<typename Name, typename FamilyNmae>
//class Person {};
template<typename Name, typename FamilyName>
class Person < Name(FamilyName) >
{
public:
   Person(Name a)
      : k{ a }
   {
   }
private:
   Name k;
   FamilyName l;
};
It compiles properly. But I cannot find rule according which received the error. I mean not explanation from compiler writer, but from the standard. Does anybody know something about it ?