Встретился с непонятным поведением в такой ситуации:
class Foo
{
private:
static const int kA = 1;
static const int kB = 2;
public:
int f(bool b) const { return (b ? kA : kB); }
int ga() const { return kA; }
int gb() const { return kB; }
};
int main()
{
Foo foo;
std::cout << foo.f(true) << foo.f(false) << foo.ga() << foo.gb() << std::endl;
}
При сборке компилятор ругается на то, что kA и kB не определены в функции Foo::f(bool) const. Почему? Почему эти же константы оказываются определены в функциях ga() и gb()? И почему в выражениях (b ? 0 : kB) и (b ? int(kA) : kB) эти константы тоже определены?