static_assert
以下が成功するのはなぜですか?オペレーターをフレンドにしただけで、<<
どこにも作っていません。
struct foo {
friend std::ostream &operator<<(std::ostream &stream, const foo &f);
};
template<typename T>
struct bar {
//succeeds:
static_assert(boost::has_left_shift<std::ostream,T>::value, "failure");
};
int main(int,char**) {
bar<foo> b;
return 0;
}