昨日コメント欄に書いたんだが。
同じことを続けて書くと、1度目と2度目で意味が変わることがある。
私が思いついているのは、昨日書いたのを含めて、以下の2例:
struct foo{
foo(){ cout << "default ctor" << endl; }
void operator()(const foo&){ cout << "()(const foo&)" << endl;}
};
template< int b > struct bar{
bar(){ cout << "ctor" << endl; }
};
template< int n >
int operator<( const bar<n> & a, int b ){ cout << "<" << endl; return 0; }
template< int n >
int operator>( int a, const bar<n> & b ){ cout << ">" << endl;return 0; }
const int baz = 1;
void test()
{
foo(foo); // foo 型の変数 foo を定義
foo(foo); // foo::operator()(...) を呼ぶ
bar<baz> bar; // bar<baz> 型の変数 bar を定義
bar<baz> bar; // operator<(...) と operator>(...) を 呼ぶ
}どちらも、1度目で型を利用して変数を定義し、それと同時に型の名前を隠す。2度目で先ほど導入した変数を利用する。
3度目までどうにかならないかとも思ったが、どうにもならない気がする。
とはいえ、もっといろいろあるに違いない。