¿Es legal C ++ pasar la dirección de una constante estática sin definición a una plantilla?

Tengo problemas para decidir si este código no debe compilarse o si ambos compiladores que probé tienen un error (GCC 4.2 y Sun Studio 12). En general, si tiene un miembro de clase estática que declara en un archivo de encabezado, debe definirlo en algún archivo fuente. Sin embargo, se hace una excepción en el estándar para integrales estáticas constantes. Por ejemplo, esto está permitido:

#include <iostream>

struct A {
    static const int x = 42;
};

Sin necesidad de agregar una definición de x fuera del cuerpo de la clase en alguna parte. Estoy tratando de hacer lo mismo, pero también tomo la dirección de x y la paso a una plantilla. Esto resulta en un error de vinculador quejándose de una falta de definición. El siguiente ejemplo no se vincula (falta una definición para A :: x) incluso cuando está todo en el mismo archivo de origen:

#include <iostream>

template<const int* y>
struct B {
    static void foo() { std::cout << "y: " << y << std::endl; }
};

struct A {
    static const int x = 42;
    typedef B<&x> fooness;
};

int main()
{
    std::cout << A::x << std::endl;
    A::fooness::foo();
}

Lo cual es extraño ya que funciona siempre y cuando no pase la dirección a una plantilla. ¿Es este un error o de alguna manera técnicamente compatible con las normas?

Edit: Debería señalar que & A :: x esno&nbsp;un valor de tiempo de ejecución. La memoria se reserva para las variables asignadas estáticamente en el momento de la compilación.