parâmetros padrão em arquivos .h e .cpp

COMPILADOR: g ++ 4.7.2

Está bem. Então estou confuso sobre os parâmetros padrão em.h e.cpp arquivos. É mencionado em muitos locais (incluindo este site) que os parâmetros padrão podem ser adicionados somente em arquivos .h e não em arquivos .cpp. No entanto, este código prova errado:

test1.h

#pragma once

#include <iostream>
using namespace std;

class Class{
public:
    Class(int, int, int=1);
};

test1.cpp

#include "test1.h"

Class::Class(int a, int b=2, int c)
{
    cout<<a<<" "<<b<<" "<<c<<endl;
}

int main()
{
    Class a(1);
    return 0;
}

Agora, de acordo com o que testei, os parâmetros padrão podem ser adicionados.cpp&nbsp;arquivos. No entanto, as seguintes restrições mantêm:

Os parâmetros padrão presentes no.cpp&nbsp;e.h&nbsp;arquivo não deve se sobrepor. isto éClass(a, b, c=1)&nbsp;(no arquivo .h) eClass::Class(a,b,c=2)(no arquivo .cpp) é inválido.

É uma regra bem conhecida que depois que os parâmetros padrão foram adicionados, todas as variáveis ​​declaradas depois disso também devem conter valores padrão. Vamos chamar isso dedefpara&nbsp;regra. Agora,

As variáveis ​​indicadas na declaração de função (.h&nbsp;arquivo) deve obedecerdefpara&nbsp;regra ou sejaClass(a, b=2, c)&nbsp;(no arquivo .h) é inválido, independentemente do que está declarado no arquivo .cpp.

Se considerarmos as variáveis ​​com valores padrão (como uma interseção de valores padrão em.h&nbsp;e.cpp&nbsp;arquivos), seguiria adefpara&nbsp;regra. isto éClass(a, b, c=1)&nbsp;(no arquivo .h) eClass::Class(a,b=2,c)( em.cpp&nbsp;arquivo) é válido. MasClass(a, b, c=1)&nbsp;(no arquivo .h) eClass::Class(a=2,b,c)( em.cpp&nbsp;arquivo) é inválido.

Então ... estou certo, errado ???