template<typename Method, typename>
struct boost::hana::is_default< Method, typename >
Returns whether a tag-dispatched method implementation is a default implementation.
Given a tag-dispatched method implementation method_impl<T...>
, is_default<method_impl<T...>>
returns whether method_impl<T...>
is a default implementation. Note that if there is no default implementation for the method, then is_default
should not be used unless a static assertion saying that "the method is not
implemented" is acceptable.
Example
#include <algorithm>
#include <iterator>
#include <sstream>
#include <vector>
template <typename T>
struct print_impl : hana::default_ {
template <typename Stream, typename X>
static void apply(Stream& out, X
const& x)
{ out << x; }
};
auto print = [](
auto& stream,
auto const& x) {
};
template <typename T>
struct print_impl<std::vector<T>> {
template <typename Stream>
static void apply(Stream& out, std::vector<T>
const& xs) {
out << '[';
std::copy(begin(xs), end(xs), std::ostream_iterator<T>{out, ", "});
out << ']';
}
};
static_assert(hana::is_default<print_impl<int>>{}, "");
static_assert(!hana::is_default<print_impl<std::vector<int>>>{}, "");
int main() {
{
std::stringstream s;
print(s, std::vector<int>{1, 2, 3});
}
{
std::stringstream s;
}
}
Inherits false_type.