Boost.Hana: boost::hana::when< condition > Struct Template Reference

| Boost.Hana 1.0.0 Your standard library for metaprogramming |

boost::hana::when< condition > Struct Template Reference
Core

## Description

### template<bool condition>
struct boost::hana::when< condition >

Enable a partial specialization only if a boolean condition is true.

You might also want to take a look at `when_valid`, which provides similar functionality but enables a specialziation only when some expression is well-formed.

> #### Rationale for using `when` instead of `std::enable_if`

> `when` is used to control the priority of partial specializations in a finer grained manner than what can be achieved with the usual `typename Enable = void` and `std::enable_if` pattern. For example, a partially specialized tag-dispatched method will have a higher priority than an equivalent specialization that uses `when`. For more details, see the tutorial section on tag-dispatching.

## Example

// Copyright Louis Dionne 2013-2016
// 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/when.hpp>
#include <type_traits>
namespace hana = boost::hana;
template <typename T, typename = hana::when<true>>
struct base_template;
template <typename T>
struct base_template<T, hana::when<std::is_integral<T>::value>> {
// something useful...
};
int main() { }