1#ifndef __JLANG__JSTREAMAVAILABLE__
2#define __JLANG__JSTREAMAVAILABLE__
20 template<
class U>
static auto is(U*) ->
decltype(std::declval<std::istream&>() >> std::declval<U&>());
21 template<
class U>
static auto os(U*) ->
decltype(std::declval<std::ostream&>() << std::declval<const U&>());
23 template<
typename>
static auto is(...) -> std::false_type;
24 template<
typename>
static auto os(...) -> std::false_type;
27 static const bool has_istream = std::is_same<std::istream&, decltype(is<T>(0))>::value;
28 static const bool has_ostream = std::is_same<std::ostream&, decltype(os<T>(0))>::value;
76 std::ostream&
print(std::ostream&
out,
const T& value,
const std::true_type option)
90 std::ostream&
print(std::ostream&
out,
const T& value,
const std::false_type option)
Test availability of stream operators.
static const bool has_ostream
true if std::ostream& operator<<(std::ostream&, const T&) is defined; else false
static auto os(...) -> std::false_type
static auto is(...) -> std::false_type
static const bool has_istream
true if std::istream& operator>>(std::istream&, T&) is defined; else false
static auto os(U *) -> decltype(std::declval< std::ostream & >()<< std::declval< const U & >())
static auto is(U *) -> decltype(std::declval< std::istream & >() > > std::declval< U & >())
Auxiliary class for format stream.
std::ostream & operator<<(const T &value)
Write value to output stream.
std::ostream & print(std::ostream &out, const T &value, const std::false_type option)
Print value if given option is true.
JStream(std::ostream &out, const std::string &message)
Constructor.
std::ostream & print(std::ostream &out, const T &value, const std::true_type option)
Print value if given option is true.
Auxiliary data structure for handling std::ostream.
STREAM(const std::string &message="")
Constructor.
friend JStream operator<<(std::ostream &out, const STREAM &format)
Format specifier.