次のコンパイルが行われないのはなぜですか。
void f(int8_t a)
{
}
void f(int16_t a)
{
}
typedef boost::variant<int8_t, int16_t> AttrValue;
int main()
{
AttrValue a;
a = int8_t(1);
f(a);
}
コンパイラエラーの場合:
error C2665: 'f' : none of the 2 overloads could convert all the argument types
could be 'void f(int8_t)'
or 'void f(int16_t)'
ただし、これは問題ありません。
std::cout << a; // f(a);
std :: ostream&operator <<(std :: ostream&、const AttrValue&)はどこで定義され、なぜ定義されているのですか?