前置依赖:

  1. _and
  2. _or
  3. _not

源码实现:

// 逻辑运算的外层包装

template<typename... _Bn>
    struct conjunction
    : __and_<_Bn...>
    { };

template<typename... _Bn>
    struct disjunction
    : __or_<_Bn...>
    { };

template<typename _Pp>
    struct negation
    : __not_<_Pp>
    { };

// 模板类别名, 提供便利接口

template<typename... _Bn>
    inline constexpr bool conjunction_v = conjunction<_Bn...>::value;

template<typename... _Bn>
    inline constexpr bool disjunction_v = disjunction<_Bn...>::value;

template<typename _Pp>
    inline constexpr bool negation_v = negation<_Pp>::value;

测试程序:

    std::cout << "conjunction test: " << std::endl;
    std::cout <<  "true && true = "
            << mySTL::conjunction_v<mySTL::true_type, mySTL::true_type> << std::endl;
    std::cout << "true && true && false = "
            << mySTL::conjunction_v<mySTL::true_type, mySTL::true_type, mySTL::false_type> << std::endl;

    std::cout << "disjunction test: " << std::endl;
    std::cout << "false || false = "
            << mySTL::disjunction_v<mySTL::false_type, mySTL::false_type> << std::endl;
    std::cout << "false || false || true = "
            << mySTL::disjunction_v<mySTL::false_type, mySTL::false_type, mySTL::true_type> << std::endl;

    std::cout << "nagetion test: " << std::endl;
    std::cout << "!true = "
            << mySTL::negation_v<mySTL::true_type> << std::endl;
    std::cout << "!false = "
            << mySTL::negation_v<mySTL::false_type> << std::endl;