Либо я очень устал, либо что-то странное происходит, что я не знаю, потому что код ниже , что приводит к символам undefined для Foo:: A и Foo:: B при связывании. Это минимизировано настолько, насколько я мог, из более крупного проекта, но показывает суть того, что я ищу.
#include <algorithm>
struct Foo
{
static const int A = 1;
static const int B = 2;
};
int main()
{
return std::min(Foo::A, Foo::B);
}
Без шаблона функции std:: min он отлично работает, т.е. просто возвращает Foo:: A. Также прекрасно, когда вы определяете статические ints вне класса/структуры (глобальные в этом простом случае). Однако, как только они будут внутри, линкер не может их найти.
Может кто-нибудь объяснить, что происходит?