【发布时间】:2014-05-10 14:21:32
【问题描述】:
我正在尝试编写类型特征来检测类型是否具有适合用于输出流的重载运算符
我遗漏了一些东西,因为对于一个根本没有运算符的简单空类,我总是如此。
代码如下:
template<typename S, typename T>
class is_streamable
{
template<typename SS, typename TT>
static auto test(SS&& s, TT&& t)
-> decltype(std::forward<SS>(s) << std::forward<TT>(t));
struct dummy_t {};
static dummy_t test(...);
using return_type = decltype(test(std::declval<S>(), std::declval<T>()));
public:
static const bool value = !std::is_same<return_type, dummy_t>::value;
};
class C {};
int main() {
std::cout << is_streamable<std::stringstream, C>::value << std::endl;
return 0;
}
输出:
1
这里是 ideone:https://ideone.com/ikSBoT
我做错了什么?
【问题讨论】:
标签: c++ templates c++11 iostream template-meta-programming