#include <iostream>
void link_test_fail(const int &x) // ошибка, только если передача по ссылке
{
std::cout << x << std::endl;
}
void link_test_ok(int x)
{
std::cout << x << std::endl;
}
class Foo
{
public:
static const int i; // ошибка только с константным полем
static int k;
void bar();
};
int Foo::k = 12;
const int Foo::i = 42;
void Foo::bar()
{
link_test_fail(i);
}
int main() {
Foo foo;
foo.bar(); // ошибка линковки
link_test_fail(Foo::i); // ошибка линковки
link_test_fail(Foo::k); // ok
link_test_ok(Foo::i); // ok
std::cout << Foo::i << std::endl; // ок
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBsaW5rX3Rlc3RfZmFpbChjb25zdCBpbnQgJngpIC8vINC+0YjQuNCx0LrQsCwg0YLQvtC70YzQutC+INC10YHQu9C4INC/0LXRgNC10LTQsNGH0LAg0L/QviDRgdGB0YvQu9C60LUKewoJc3RkOjpjb3V0IDw8IHggPDwgc3RkOjplbmRsOwp9Cgp2b2lkIGxpbmtfdGVzdF9vayhpbnQgeCkKewoJc3RkOjpjb3V0IDw8IHggPDwgc3RkOjplbmRsOwp9CgpjbGFzcyBGb28KewpwdWJsaWM6CglzdGF0aWMgY29uc3QgaW50IGk7IC8vINC+0YjQuNCx0LrQsCDRgtC+0LvRjNC60L4g0YEg0LrQvtC90YHRgtCw0L3RgtC90YvQvCDQv9C+0LvQtdC8CglzdGF0aWMgaW50IGs7CgkKCXZvaWQgYmFyKCk7Cn07CgppbnQgRm9vOjprID0gMTI7CmNvbnN0IGludCBGb286OmkgPSA0MjsKCnZvaWQgRm9vOjpiYXIoKQp7CQoJbGlua190ZXN0X2ZhaWwoaSk7Cn0KCmludCBtYWluKCkgewoJRm9vIGZvbzsKCWZvby5iYXIoKTsgLy8g0L7RiNC40LHQutCwINC70LjQvdC60L7QstC60LgKCWxpbmtfdGVzdF9mYWlsKEZvbzo6aSk7IC8vINC+0YjQuNCx0LrQsCDQu9C40L3QutC+0LLQutC4CgkKCWxpbmtfdGVzdF9mYWlsKEZvbzo6ayk7IC8vIG9rCglsaW5rX3Rlc3Rfb2soRm9vOjppKTsgLy8gb2sKCXN0ZDo6Y291dCA8PCBGb286OmkgPDwgc3RkOjplbmRsOyAvLyDQvtC6CgkKCXJldHVybiAwOwp9