//===----------------------------------------------------------------------===// // // 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 CanDeductFlatMultiSet = requires { std::flat_multiset(std::declval()...); }; static_assert(CanDeductFlatMultiSet>); // cannot deduce Key and T from nothing static_assert(!CanDeductFlatMultiSet<>); // cannot deduce Key and T from just (Compare) static_assert(!CanDeductFlatMultiSet>); // cannot deduce Key and T from just (Compare, Allocator) static_assert(!CanDeductFlatMultiSet, std::allocator>); // cannot deduce Key and T from just (Allocator) static_assert(!CanDeductFlatMultiSet>); // cannot convert from some arbitrary unrelated type static_assert(!CanDeductFlatMultiSet);