関数ポインタとデフォルト引数

C++ でこんな感じのコードを考えてたわけです。

template<int def>
int foo(int x=def) {
  return x;
}

int foo32(void) {
  return foo<32>();
}

int main(void) {
  foo32();
  return 0;
}

あれ? これ C++11 なら foo32 の定義はこう置きかえられるんじゃね?

auto foo32=foo<32>;

駄目でした。

エラー: 関数への引数が少なすぎます

そりゃそうだよね。 こうすると foo32 は関数じゃなくて関数ポインタになっちゃうんだよね。 デフォルト引数なんて知ったことではないよね。

Document ID: a54221bfe9698dab454cf032add44a3e