Search code examples
c++c++11template-meta-programmingtype-traitsboost-mpl

negation of std::integral_constant<bool>


Sorry for asking so simple question, but I cannot find the answer easily. Google says nothing interesting about "C++ negation integral_constant" and similar queries.

Is there in C++11 any trait that make std::true_type from std::false_type and vice versa? In other words, I'd like some more readeble version of

std::is_same<my_static_bool, std::false_type>

I know of course I can write it myself, but I'd like to use the existing one if there is such.


Solution

  • There is not, because it's essentially a one-liner and the <type_traits> should be as small as possible.

    template <typename T> using static_not = std::integral_constant<bool, !T::value>;
    

    Usage:

    static_not<my_static_bool>
    

    This is the correct way because the standard always says "false_type or derived from such", so you can't depend on being equal to std::false_type. I usually relax that to "having a constexpr boolean ::value property" because I don't use tag dispatching.