https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83134

            Bug ID: 83134
           Summary: std::negation uses !B::value instead of
                    !bool(B::value)
           Product: gcc
           Version: 7.2.1
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

#include <type_traits>

struct X {
  constexpr operator bool() const { return false; }
  constexpr bool operator!() const = delete;
};

struct Y {
  static constexpr X value{};
};

int main() {
  static_assert(std::negation<Y>::value);  
}

In file included from neg.cc:1:0:
/home/jwakely/gcc/8/include/c++/8.0.0/type_traits: In instantiation of ‘struct
std::__not_<Y>’:
/home/jwakely/gcc/8/include/c++/8.0.0/type_traits:172:12:   required from
‘struct std::negation<Y>’
neg.cc:13:33:   required from here
/home/jwakely/gcc/8/include/c++/8.0.0/type_traits:154:38: error: use of deleted
function ‘constexpr bool X::operator!() const’
     : public integral_constant<bool, !_Pp::value>
                                      ^~~~
neg.cc:5:18: note: declared here
   constexpr bool operator!() const = delete;
                  ^~~~~~~~
neg.cc: In function ‘int main()’:
neg.cc:13:35: error: ‘value’ is not a member of ‘std::negation<Y>’
   static_assert(std::negation<Y>::value);
                                   ^~~~~

Reply via email to