#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 は優先順位ルールを「修正」することは想定されていませんか?