2
0
mirror of https://github.com/boostorg/hana.git synced 2026-02-01 20:42:13 +00:00
Files
hana/example/core/when_valid.cpp
2014-11-07 15:41:10 -05:00

36 lines
782 B
C++

/*
@copyright Louis Dionne 2014
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
*/
#include <boost/hana/core/typeclass.hpp>
#include <iostream>
#include <string>
#include <utility>
using namespace boost::hana;
struct Printable {
BOOST_HANA_TYPECLASS(Printable);
};
auto print = [](std::ostream& os, auto x) {
return Printable::instance<datatype_t<decltype(x)>>::print_impl(os, x);
};
template <typename T>
struct Printable::instance<T, when_valid<
decltype(std::declval<std::ostream&>() << std::declval<T>())
>> {
static void print_impl(std::ostream& os, T x) {
os << x;
}
};
int main() {
print(std::cout, 2);
print(std::cout, std::string{"foo"});
}