Встретился с непонятным поведением в такой ситуации:
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) эти константы тоже определены?






