//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 // // Test CTAD on cases where deduction should fail. #include #include #include #include #include struct NotAnAllocator { friend bool operator<(NotAnAllocator, NotAnAllocator) { return false; } }; template concept CanDeductFlatSet = requires { std::flat_set(std::declval()...); }; static_assert(CanDeductFlatSet>); // cannot deduce Key and T from nothing static_assert(!CanDeductFlatSet<>); // cannot deduce Key and T from just (Compare) static_assert(!CanDeductFlatSet>); // cannot deduce Key and T from just (Compare, Allocator) static_assert(!CanDeductFlatSet, std::allocator>); // cannot deduce Key and T from just (Allocator) static_assert(!CanDeductFlatSet>); // cannot convert from some arbitrary unrelated type static_assert(!CanDeductFlatSet);