Либо я очень устал, либо происходит что-то странное, о чем я не знаю, потому что приведенный ниже код приводит к неопределенным символам для 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 . Также хорошо при определении статических целых значений вне класса / структуры (в этом простом случае глобальных). Однако, как только они внутри вот так, компоновщик не может их найти.
Может кто-нибудь объяснить, что происходит?