9
#include <iostream>
#include <cstdint>

template<int T> void foo()
{
  std::cout << "a" << std::endl;
}

template<uint8_t T> void foo()
{
  std::cout << "b" << std::endl;
}

int main()
{
  foo<static_cast<uint8_t>(42)> ();
  foo<static_cast<int>(42)>();
  return(0);
}

これが期待どおりに機能しない理由は何ですか?

私のgcc 4.8.1はあいまいな呼び出しについて不平を言っていますが、同じ優先順位を持つ2つのタイプがあるこのような場合、 static_cast は優先順位ルールを「修正」することは想定されていませんか?

4

1 に答える 1