サンプルコードはhttp://en.cppreference.com/w/cpp/types/add_cvから取得しまし た (少し変更しました。)
struct foo
{
void m() { std::cout << "Non-cv\n"; }
void m() const { std::cout << "Const\n"; }
};
template<class T>
void call_m()
{
T().m();
}
int main()
{
call_m<foo>();
call_m<const foo>(); //here
}
出力は次のとおりです。
Non-cv
Non-cv
2 番目の呼び出しでT
は、const が修飾されているのでT()
、const バージョンを呼び出す必要がありますよね? または、私が見逃した特別なルールはありますか?