//===----------------------------------------------------------------------===// // // 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, c++23 // // [string.op.plus] // // template // constexpr basic_string // operator+(const basic_string& lhs, // type_identity_t> rhs); // Since C++26 // template // constexpr basic_string // operator+(basic_string&& lhs, // type_identity_t> rhs); // Since C++26 // template // constexpr basic_string // operator+(type_identity_t> lhs, // const basic_string& rhs); // Since C++26 // template // constexpr basic_string // operator+(type_identity_t> lhs, // basic_string&& rhs); // Since C++26 #include #include #include #include #include "asan_testing.h" #include "constexpr_char_traits.h" #include "make_string.h" #include "min_allocator.h" #include "test_allocator.h" #include "test_macros.h" template > class ConvertibleToStringView { public: constexpr explicit ConvertibleToStringView(const CharT* cs) : cs_{cs} {} constexpr operator std::basic_string_view() { return std::basic_string_view(cs_); } constexpr operator std::basic_string_view() const { return std::basic_string_view(cs_); } private: const CharT* cs_; }; static_assert(std::constructible_from, const ConvertibleToStringView>); static_assert(std::convertible_to, std::basic_string_view>); static_assert(std::constructible_from, ConvertibleToStringView>); static_assert(std::convertible_to, std::basic_string_view>); #define CS(S) MAKE_CSTRING(CharT, S) template