次のプログラムでは、「Here」が出力されます。
#include <iostream>
class Base
{
static bool temp;
static bool initTemp()
{std::cout<<"Here\n";return true;}
};
bool Base::temp = Base::initTemp();
class Derived : public Base
{};
int main() {int a;std::cin>>a;}
次のプログラムでは、"Here" は出力されません。
#include <iostream>
template <class T>
class Base
{
static bool temp;
static bool initTemp()
{std::cout<<"Here\n";return true;}
};
template <class T>
bool Base<T>::temp = Base<T>::initTemp();
class Derived : public Base<int>
{};
int main() {int a;std::cin>>a;}
どちらの場合も Base は参照されません。唯一の違いは、2 番目のケースではテンプレート クラスであることです。この動作が発生する理由を誰かに説明してもらえますか。私はVS2012を使用しています。