Законно ли в C ++ передавать адрес статического const int без определения в шаблон?

У меня возникли проблемы с решением, должен ли этот код компилироваться, или если только у обоих компиляторов, которые я пробовал, была ошибка (GCC 4.2 и Sun Studio 12). В общем, если у вас есть статический член класса, который вы объявляете в заголовочном файле, вы должны определить его в некотором исходном файле. Однако в стандарте сделано исключение для статических константных интегралов. Например, это разрешено:

#include 

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

Без необходимости добавлять определение x вне тела класса. Я'Я пытаюсь сделать то же самое, но я также беру адрес x и передаю его шаблону. Это приводит к ошибке компоновщика с жалобой на отсутствие определения. Приведенный ниже пример неt link (отсутствует определение для A :: x), даже если оно 'Все в одном исходном файле:

#include 

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

struct A {
    static const int x = 42;
    typedef B

Ответы на вопрос(4)

Ваш ответ на вопрос