8concept SqlStringInterface =
9 requires(S s, S
const cs, std::size_t n, S::value_type ch, std::basic_string_view<typename S::value_type> sv) {
13 typename S::value_type;
15 typename S::const_iterator;
16 typename S::pointer_type;
17 typename S::const_pointer_type;
22 std::is_default_constructible_v<S>;
23 std::is_copy_constructible_v<S>;
24 std::is_move_constructible_v<S>;
29 { cs.size() } -> std::same_as<std::size_t>;
30 { cs.capacity() } -> std::same_as<std::size_t>;
31 { cs.empty() } -> std::same_as<bool>;
36 { s.clear() } -> std::same_as<void>;
37 { s.resize(n) } -> std::same_as<void>;
38 { s.setsize(n) } -> std::same_as<void>;
39 { s.reserve(n) } -> std::same_as<void>;
41 { s.push_back(ch) } -> std::same_as<void>;
42 { s.pop_back() } -> std::same_as<void>;
47 { s[n] } -> std::same_as<typename S::value_type&>;
48 { cs[n] } -> std::same_as<typename S::value_type const&>;
53 { s.begin() } -> std::same_as<typename S::iterator>;
54 { s.end() } -> std::same_as<typename S::iterator>;
55 { cs.begin() } -> std::same_as<typename S::const_iterator>;
56 { cs.end() } -> std::same_as<typename S::const_iterator>;
58 { s.data() } -> std::same_as<typename S::pointer_type>;
59 { cs.data() } -> std::same_as<typename S::const_pointer_type>;
60 { s.c_str() } -> std::same_as<typename S::const_pointer_type>;
61 { cs.c_str() } -> std::same_as<typename S::const_pointer_type>;
66 { cs.substr() } -> std::same_as<std::basic_string_view<typename S::value_type>>;
68 { cs.str() } -> std::same_as<std::basic_string_view<typename S::value_type>>;
70 { cs.ToString() } -> std::same_as<std::basic_string<typename S::value_type>>;
72 { cs.ToStringView() } -> std::same_as<std::basic_string_view<typename S::value_type>>;
74 static_cast<std::basic_string<typename S::value_type>
>(cs);
75 static_cast<std::basic_string_view<typename S::value_type>
>(cs);
80 { cs == sv } -> std::same_as<bool>;
81 { cs != sv } -> std::same_as<bool>;