lwg3282_neg.cc 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Copyright (C) 2020-2022 Free Software Foundation, Inc.
  2. //
  3. // This file is part of the GNU ISO C++ Library. This library is free
  4. // software; you can redistribute it and/or modify it under the
  5. // terms of the GNU General Public License as published by the
  6. // Free Software Foundation; either version 3, or (at your option)
  7. // any later version.
  8. // This library is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. // GNU General Public License for more details.
  12. // You should have received a copy of the GNU General Public License along
  13. // with this library; see the file COPYING3. If not see
  14. // <http://www.gnu.org/licenses/>.
  15. // { dg-options "-std=gnu++2a" }
  16. // { dg-do compile { target c++2a } }
  17. #include <ranges>
  18. using std::ranges::subrange;
  19. // LWG 3282. subrange converting constructor should disallow derived to base
  20. // conversions
  21. struct Base {};
  22. struct Derived : Base {};
  23. subrange<Derived*> sd;
  24. subrange<Base*> sb = sd; // { dg-error "conversion" }
  25. void
  26. test_lwg3404()
  27. {
  28. // LWG 3404. Finish removing subrange's conversions from pair-like
  29. std::pair<char*, char*> p;
  30. subrange sb1(p); // { dg-error "no matching function" }
  31. // { dg-error "class template argument deduction" "" { target *-*-* } 38 }
  32. subrange sb2(p, p.second - p.first); // { dg-error "no matching function" }
  33. // { dg-error "class template argument deduction" "" { target *-*-* } 40 }
  34. // { dg-prune-output "in requirements with" }
  35. }