aboutsummaryrefslogtreecommitdiff
path: root/libcxx/test/std/utilities/function.objects
AgeCommit message (Collapse)AuthorFilesLines
2025-08-29[libc++] Disable cv-qualified arithmetic hash specializations (#155786)Nikolas Klauser3-0/+30
#140407 accidentally enabled `hash` for cv-qualified types. This patch disables these specializations again.
2025-08-25[libcxx][test] Fix typos (#155217)Stephan T. Lavavej6-0/+0
I noticed a typo in the directory name `refwrap.comparissons`, then did a quick pass to fix typos elsewhere in the tests. All fixes were manual (some carefully search-and-replaced); I used [cspell](https://www.npmjs.com/package/cspell) to find them.
2025-08-13[libc++] Move some standard tests from test/libcxx (#152982)Nikolas Klauser3-0/+216
This also removes some tests which were redundant, wrong, or never run. Specifically, - `libcxx/utilities/meta/stress_tests/*` were never run and are of questionable usefulness - `libcxx/utilities/template.bitset/includes.pass.cpp` is completely redundant and partially incorrect Also notably, `libcxx/language.support/support.c.headers/support.c.headers.other/math.lerp.verify.cpp` has been refactored to only test the standard mandate.
2025-08-05[Clang] Add detailed notes explaining why `is_constructible` evaluates to ↵Corentin Jabot2-0/+3
false (Revert 16d5db7) (#151935) Adds explanation why `is_constructible` evaluates to false. This reapplies as-is e476f968bc8e438a0435d10934f148de570db8eb. This was reverted in 16d5db71b3c38f21aa17783a8758f947dca5883f because of a test failure in libc++. The test failure in libc++ is interesting in that, in the absence of nested diagnostics a bunch of diagnostics are emitted as error instead of notes, which we cannot silence with `-verify-ignore-unexpected`. The fix here is to prevent the diagnostics to be emitted in the first place. However this is clearly not ideal and we should make sure to deploy a better solution in the clang 22 time frame, in the lines of https://discourse.llvm.org/t/rfc-add-a-new-text-diagnostics-format-that-supports-nested-diagnostics/87641/12 Fixes #150601 --------- Co-authored-by: Shamshura Egor <164661612+egorshamshura@users.noreply.github.com>
2025-07-30Revert "[libc++][Clang] Added explanation why is_constructible evaluated to ↵Victor Campos2-3/+0
false. Updated the diagnostics checks in libc++ tests. (#144220)" This reverts commit e476f968bc8e438a0435d10934f148de570db8eb. It has introduced a failure tracked by https://github.com/llvm/llvm-project/issues/150601 One libcxx test fail if libcxx is build with no exceptions and no RTTI: - libcxx/utilities/expected/expected.expected/value.observers.verify.cpp
2025-07-08[libc++][Clang] Added explanation why is_constructible evaluated to false. ↵Shamshura Egor2-0/+3
Updated the diagnostics checks in libc++ tests. (#144220) Added explanation why a is constructible evaluated to false. Also fixed problem with ExtractTypeTraitFromExpression. In case std::is_xxx_v<> with variadic pack it tries to get template argument, but fails in expression Arg.getAsType() due to Arg.getKind() == TemplateArgument::ArgKind::Pack, but not TemplateArgument::ArgKind::Type. Reverts #144127 Fixies https://github.com/llvm/llvm-project/pull/143309#issuecomment-2970012054
2025-07-06[libc++] P2655R3 common_reference_t of reference_wrapper Should Be a ↵Hui1-0/+152
Reference Type (#141408) Fixes #105260 This patch applies the change as a DR to C++20. The rationale is that the paper is more like a bug fix. It does not introduce new features, it simply changes an existing behaviour (as a bug fix). MSVC STL DRed this paper to C++20 as well.
2025-06-15[libc++] P2944R3: Constrained comparisons - update `reference_wrapper` ↵Hristo Hristov8-115/+30
implementation (#139368) Updates the implementation `std::reference_wrapper` - [P2944R3](https://wg21.link/P2944R3) as discussed in https://github.com/llvm/llvm-project/pull/117664#discussion_r1857826166 This PR also refactors the tests in preparation to implements the constrained comparisons for `optional`, `variant` etc. - Moves the test helpers (concepts and types) for testing constrained comparisons to `test_comparisons.h`. - Updates the `std::reference_wrapper` implementation to use the concept `__core_convertible_to<bool>` as per comments in #135759. Closes #138233 # References: - [refwrap.comparisons](https://wg21.link/refwrap.comparisons) --------- Co-authored-by: Hristo Hristov <zingam@outlook.com> Co-authored-by: Nikolas Klauser <nikolasklauser@berlin.de>
2025-03-18[libc++] Improve deprecated diagnostic guards.Mark de Wever1-0/+2
Recent Clang-21 builds improved the deprecated diagnotics. This uncovered missing guards in libc++ internally. Note: This patch should be a separate commit and not merged. For testing purposes they are combined. Reviewed as part of #130497.
2025-01-10[libc++] Implement std::not_fn<NTTP> (#86133)Jakub Mazurkiewicz2-0/+339
Implement `std::not_fn<NTTP>` from "P2714R1 Bind front and back to NTTP callables".
2024-10-31[libc++] Granularize <cstddef> includes (#108696)Nikolas Klauser6-10/+9
2024-10-15[libc++] Fix expression-equivalence for `mem_fn` (#111307)A. Jiang7-391/+742
Previously, SFINAE constraints and exception specification propagation were missing in the return type of libc++'s `std::mem_fn`. The requirements on expression-equivalence (or even plain "equivalent" in pre-C++20 specification) in [func.memfn] are actually requiring them. This PR adds the missed stuffs. Fixes #86043. Drive-by changes: - removing no longer used `__invoke_return`, - updating synopsis comments in several files, and - merging several test files for `mem_fn` into one.
2024-09-16[libc++][modules] Fix missing and incorrect includes (#108850)Louis Dionne4-4/+11
This patch adds a large number of missing includes in the libc++ headers and the test suite. Those were found as part of the effort to move towards a mostly monolithic top-level std module.
2024-09-16[libc++] Replace `__compressed_pair` with `[[no_unique_address]]` (#76756)Nikolas Klauser1-4/+0
This significantly simplifies the code, improves compile times and improves the object layout of types using `__compressed_pair` in the unstable ABI. The only downside is that this is extremely ABI sensitive and pedantically breaks the ABI for empty final types, since the address of the subobject may change. The ABI of the whole object should not be affected. Fixes #91266 Fixes #93069
2024-05-29[libc++][test] Close LWG3238 and add tests (#93043)Hui2-35/+25
2024-05-22[NFC][libc++][test] Removes C++98 support. (#92930)Mark de Wever4-4/+4
Libc++ has no separate C++98 support, it uses C++03 instead. This removes some obsolete c++98 markers in the test. Thanks to @StephanTLavavej for spotting this.
2024-05-09[libc++][functional] P2944R3 (partial): Comparisons for `reference_wrapper` ↵Hristo Hristov8-0/+538
(`reference_wrapper` operators only) (#88384) Implements https://wg21.link/P2944R3 (partially) Implements https://wg21.link/LWG4071 / https://cplusplus.github.io/LWG/issue4071 (fixes build failures in the test suite) - https://eel.is/c++draft/refwrap.comparisons
2024-04-09[libc++] Implement `bind_back` (#81055)Jakub Mazurkiewicz4-6/+533
Implement `std::bind_back` function from P2387R3 "Pipe support for user-defined range adaptors".
2024-01-09[libc++] Allow running the test suite with optimizations (#68753)Louis Dionne6-24/+24
This patch adds a configuration of the libc++ test suite that enables optimizations when building the tests. It also adds a new CI configuration to exercise this on a regular basis. This is added in the context of [1], which requires building with optimizations in order to hit the bug. [1]: https://github.com/llvm/llvm-project/issues/68552
2023-12-10[libc++][test] Fix more MSVC and Clang warnings (#74965)Stephan T. Lavavej1-11/+9
Found while running libc++'s tests with MSVC's STL. * `libcxx/test/std/algorithms/alg.sorting/alg.heap.operations/sort.heap/ranges_sort_heap.pass.cpp` + Fix Clang `-Wunused-variable`, because `LIBCPP_ASSERT` expands to nothing for MSVC's STL. + This is the same "always void-cast" change that #73437 applied to the neighboring `complexity.pass.cpp`. I missed that `ranges_sort_heap.pass.cpp` was also affected because we had disabled this test. * `libcxx/test/std/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp` * `libcxx/test/std/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp` + Fix MSVC "warning C4244: '`=`': conversion from '`__int64`' to '`_Ty`', possible loss of data". + This is a valid warning, possibly the best one that MSVC found in this entire saga. We're accumulating a `std::vector<std::streamsize>` and storing the result in `std::streamsize total_size` but we actually have to start with `std::streamsize{0}` or we'll truncate. * `libcxx/test/std/input.output/filesystems/fs.enum/enum.path.format.pass.cpp` + Fix Clang `-Wunused-local-typedef` because the following usage is libc++-only. + I'm just expanding it at the point of use, and using the dedicated `LIBCPP_STATIC_ASSERT` to keep the line length down. * `libcxx/test/std/input.output/syncstream/syncbuf/syncstream.syncbuf.assign/swap.pass.cpp` + Fix MSVC "warning C4242: 'argument': conversion from '`int`' to '`const _Elem`', possible loss of data". + This is a valid warning (possibly the second-best) as `sputc()` returns `int_type`. If `sputc()` returns something unexpected, we want to know, so we should separately say `expected.push_back(CharT('B'))`. * `libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.pass.cpp` * `libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.pass.cpp` + Fix MSVC "warning C6001: Using uninitialized memory '`x`'." + [N4964](https://wg21.link/N4964) \[new.delete.single\]/12: > *Effects:* The deallocation functions (\[basic.stc.dynamic.deallocation\]) called by a *delete-expression* (\[expr.delete\]) to render the value of `ptr` invalid. + \[basic.stc.general\]/4: > When the end of the duration of a region of storage is reached, the values of all pointers representing the address of any part of that region of storage become invalid pointer values (\[basic.compound\]). Indirection through an invalid pointer value and passing an invalid pointer value to a deallocation function have undefined behavior. Any other use of an invalid pointer value has implementation-defined behavior. + In certain configurations, after `delete x;` MSVC will consider `x` to be radioactive (and in other configurations, it'll physically null out `x` as a safety measure). We can copy it into `old_x` before deletion, which the implementation finds acceptable. * `libcxx/test/std/ranges/range.adaptors/range.elements/general.pass.cpp` * `libcxx/test/std/ranges/range.adaptors/range.elements/iterator/deref.pass.cpp` + Fix MSVC "warning C4242: 'initializing': conversion from '`_Ty`' to '`_Ty`', possible loss of data". + This was being emitted in `pair` and `tuple`'s perfect forwarding constructors. Passing `short{1}` allows MSVC to see that no truncation is happening. * `libcxx/test/std/ranges/range.adaptors/range.elements/iterator/member_types.compile.pass.cpp` + Fix MSVC "warning C4242: 'initializing': conversion from '`_Ty`' to '`_Ty2`', possible loss of data". + Similarly, this was being emitted in `pair`'s perfect forwarding constructor. After passing `short{1}`, I reduced repetition by relying on CTAD. (I can undo that cleanup if it's stylistically undesirable.) * `libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_conv_ctor.pass.cpp` + Fix MSVC "warning C4930: '`std::reference_wrapper<int> purr(void)`': prototyped function not called (was a variable definition intended?)". + There's no reason for `purr()` to be locally declared (aside from isolating it to a narrow scope, which has minimal benefits); it can be declared like `meow()` above. :smile_cat: * `libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared_for_overwrite.pass.cpp` * `libcxx/test/std/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique_for_overwrite.default_init.pass.cpp` + Fix MSVC static analysis warnings when replacing `operator new`: ``` warning C28196: The requirement that '(_Param_(1)>0)?(return!=0):(1)' is not satisfied. (The expression does not evaluate to true.) warning C6387: 'return' could be '0': this does not adhere to the specification for the function 'new'. warning C6011: Dereferencing NULL pointer 'reinterpret_cast<char *>ptr+i'. ``` + All we need is a null check, which appears in other `operator new` replacements: https://github.com/llvm/llvm-project/blob/b85f1f9b182234ba366d78ae2174a149e44d08c1/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new.size.replace.pass.cpp#L27-L28
2023-12-04[libc++] Rename _LIBCPP_INLINE_VISIBILITY to _LIBCPP_HIDE_FROM_ABI (#74095)Louis Dionne1-1/+1
In preparation for running clang-format on the whole code base, we are also removing mentions of the legacy _LIBCPP_INLINE_VISIBILITY macro in favor of the newer _LIBCPP_HIDE_FROM_ABI. We're still leaving the definition of _LIBCPP_INLINE_VISIBILITY to avoid creating needless breakage in case some older patches are checked-in with mentions of the old macro. After we branch for LLVM 18, we can do another pass to clean up remaining uses of the macro that might have gotten introduced by mistake (if any) and remove the macro itself at the same time. This is just a minor convenience to smooth out the transition as much as possible. See https://discourse.llvm.org/t/rfc-clang-formatting-all-of-libc-once-and-for-all for the clang-format proposal.
2023-12-01[libc++][NFC] Update the remaining old license headersNikolas Klauser3-12/+9
2023-11-26[libc++][test] Fix unused and nodiscard warnings (#73437)Stephan T. Lavavej1-2/+2
Found while running libc++'s test suite with MSVC's STL. This is structured into a series of commits for easier reviewing; I could also split this into smaller PRs if desired. * Add void-casts for `invoke_r` calls to fix MSVC STL `[[nodiscard]]` warnings. + Our rationale is that if someone is calling `invoke_r<NonVoidType>`, it sure looks like they care about the return value. * Add `[[maybe_unused]]` to silence `-Wunused-parameter` warnings. + This happens because the parameters are used within `LIBCPP_ASSERT`, which vanishes for MSVC's STL. This also motivates the following changes. * Add `[[maybe_unused]]` to fix `-Wunused-variable` warnings. * Always void-cast `debug_comparisons` to fix `-Wunused-variable` warnings. + As this was already unused with a void-cast in one `_LIBCPP_HARDENING_MODE` branch, I'm simply lifting it next to the variable definition. * Add `[[maybe_unused]]` to fix `-Wunused-local-typedef` warnings.
2023-10-29[libc++] Remove a few transitive includes (#70553)philnik7771-0/+1
2023-09-28[libc++][NFC] Simplify checks for static assertions in .verify.cpp tests ↵Louis Dionne1-1/+1
(#67559) We don't neeed to handle both spellings anymore since we don't support Clang 15 anymore.
2023-09-25[libc++] Remove the CI job testing Clang 15 (#66406)Louis Dionne1-1/+0
Since LLVM 17 has been branched and is on the verge of being released, we can drop the CI job that tests against Clang 15. I think the number of cherry-picks to `release/17.x` will be a lot smaller now, so keeping a Clang 15 job around for that purpose seems unnecessary. As a fly-by, this patch also removes some Clang 15 workarounds and test suite annotations as we usually do. It also removes some slightly older gcc test suite annotations that were missed.
2023-09-25[runtimes] Bump the supported AppleClang version to AppleClang 15 (#67065)Louis Dionne1-1/+1
AppleClang 15 was released on September 18th and is now stable. Per our policy, we're bumping the supported AppleClang compiler to the latest release. This allows cleaning up the test suite, but most importantly unblocking various other patches that are blocked on bumping the compiler requirements.
2023-09-21[runtimes][NFC] Remove old Lit annotations for gcc-12 and clang-14Louis Dionne1-1/+1
We don't support these compilers anymore so these Lit annotations were never used.
2023-09-21[libc++] Implement LWG-3655: The INVOKE operation and union typesIgor Zhukov1-0/+69
https://cplusplus.github.io/LWG/issue3655 Differential Revision: https://reviews.llvm.org/D144645 Co-authored-by: Louis Dionne <ldionne.2@gmail.com>
2023-07-19[libcxx] Fix copy_move.pass testHaowei Wu1-1/+1
When LLVM is built under MSVC and libcxx ABI is set to 2, the 'copy_move.pass' test will unexpectedly pass. This patch mitigate this issue by setting this test will only expecting FAIL when libcxx ABI version is set to 1. This is a re-land of be9f55f4fff47badcdca17be5bcc0a4a15894739 Differential Revision: https://reviews.llvm.org/D155760 Fixes: https://github.com/llvm/llvm-project/issues/63442
2023-07-19[libc++] Revert "[libcxx] Fix copy_move.pass test"Louis Dionne1-1/+1
This reverts commit be9f55f4fff47badcdca17be5bcc0a4a15894739. The commit was both not approved by the libc++ review group, and also the only change it contained was incorrect.
2023-07-19[libcxx] Fix copy_move.pass testHaowei Wu1-1/+1
When LLVM is built under MSVC and libcxx ABI is set to 2, the 'copy_move.pass' test will unexpectedly pass. This patch mitigate this issue by setting this test will only expecting FAIL when libcxx ABI version is set to 1. Differential Revision: https://reviews.llvm.org/D155760 Fixes: https://github.com/llvm/llvm-project/issues/63442
2023-05-03[libc++] Make std::bind constexpr-friendlyLouis Dionne5-95/+122
std::bind is supposed to be constexpr-friendly since C++20 and it was marked as such in our synopsis. However, the tests were not actually testing any of it and as it happens, std::bind was not really constexpr friendly. This fixes the issue and makes sure that at least some of the tests are running in constexpr mode. Some tests for std::bind check functions that return void, and those use global variables. These tests haven't been made constexpr-friendly, however the coverage added by this patch should be sufficient to get decent confidence. Differential Revision: https://reviews.llvm.org/D149295
2023-04-27[libc++] Fix ODR violation with placeholdersLouis Dionne1-72/+57
In D145589, we made the std::bind placeholders inline constexpr to satisfy C++17. It turns out that this causes ODR violations since the shared library provides strong definitions for those placeholders, and the linker on Windows actually complains about this. Fortunately, C++17 only encourages implementations to use `inline constexpr`, it doesn't force them. So instead, we unconditionally define the placeholders as `extern const`, which avoids the ODR violation and is indistinguishable from `inline constexpr` for most purposes, since the placeholders are empty types anyway. Note that we could also go back to the pre-D145589 state of defining them as non-inline constexpr variables in C++17, however that is definitely non-conforming since that means the placeholders have different addresses in different TUs. This is all a bit pedantic, but all in all I feel that `extern const` provides the best bang for our buck, and I can't really find any downsides to that solution. Differential Revision: https://reviews.llvm.org/D149292
2023-04-15[libc++] Removes Clang 14 support.Mark de Wever1-1/+1
Per our policy we only support the last two releases. Reviewed By: #libc, EricWF, philnik Differential Revision: https://reviews.llvm.org/D148359
2023-04-07[libc++] Qualifies intmax_t and uintmax_t.Mark de Wever1-2/+2
This has been done using the following command find libcxx/test -type f -exec perl -pi -e 's|^([^/]+?)((?<!::)(?<!::u)u?intmax_t)|\1std::\2|' \{} \; The std module doesn't export declarations in the global namespaace. This is a preparation for that module. Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D146821
2023-03-22[libc++] Qualifies intptr_t and uintptr_t.Mark de Wever1-2/+2
This has been done using the following command find libcxx/test -type f -exec perl -pi -e 's|^([^/]+?)((?<!::)(?<!::u)u?intptr_t)|\1std::\2|' \{} \; The std module doesn't export declarations in the global namespaace. This is a preparation for that module. Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D146643
2023-03-21[libc++] Qualifies size_t.Mark de Wever6-7/+7
This has been done using the following command find libcxx/test -type f -exec perl -pi -e 's|^([^/]+?)((?<!::)size_t)|\1std::\2|' \{} \; And manually removed some false positives in std/depr/depr.c.headers. The `std` module doesn't export `::size_t`, this is a preparation for that module. Reviewed By: ldionne, #libc, EricWF, philnik Differential Revision: https://reviews.llvm.org/D146088
2023-03-17[libc++] Remove unnecessary main() function in .compile.pass.cpp and ↵Louis Dionne11-59/+13
.verify.cpp tests We pretty consistently don't define those cause they are not needed, and it removes the potential pitfall to think that these tests are being run. This doesn't touch .compile.fail.cpp tests since those should be replaced by .verify.cpp tests anyway, and there would be a lot to fix up. As a fly-by, I also fixed a bit of formatting, removed a few unused includes and made some very minor, clearly NFC refactorings such as in allocator.traits/allocator.traits.members/allocate.verify.cpp where the old test basically made no sense the way it was written. Differential Revision: https://reviews.llvm.org/D146236
2023-03-14[libc++] Qualifies uint32_t and friends.Mark de Wever2-24/+24
This has been done using the following command find libcxx/test -type f -exec perl -pi -e 's|^([^/]+?)((?<!::)(?<!::u)u?int(_[a-z]+)?[0-9]{1,2}_t)|\1std::\2|' \{} \; And manually removed some false positives in std/depr/depr.c.headers. Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D145880
2023-03-08[libc++][test] Uses qualified std::uint32_t.Mark de Wever1-1/+1
The module std does not provide c-types in the global namespace. This means all these types need to be fully qualified. This is a first step to convert them by using sed. Since this is an automated conversion other types like uint64_t are kept as is. Note that tests in the directory libcxx/test/std/depr/depr.c.headers should not be converted automatically. This requires manual attention, there some test require testing uint32_t in the global namespace. These test should fail when using the std module, and pass when using the std.compat module. A similar issue occurs with atomic, atomic_uint32_t is specified as using atomic_uint32_t = atomic<uint32_t>; // freestanding So here too we need to keep the name in the global namespace in the tests. Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D145520
2023-02-27[libc++] Fix "size_t" constants that should be "bool" or "int", and add testsArthur O'Dwyer2-0/+7
`is_placeholder`, despite having an "is_" name, actually returns an int: 1 for `_1`, 2 for `_2`, 3 for `_3`, and so on. But it should still be int, not size_t.
2023-02-13[libc++] Implement P2136R3 std::invoke_rLouis Dionne3-40/+170
Differential Revision: https://reviews.llvm.org/D143610
2023-02-10[libc++] Simplify non_default_allocLouis Dionne2-0/+12
Also, since it is only used in two tests that are C++11/C++14 tests only, I don't think it is worth keeping around in test_allocator.h.
2023-01-31[libc++] Addresses LWG3764.Mark de Wever1-6/+379
LWG3764 reference_wrapper::operator() should propagate noexcept As drive-by adds constexpr to the synopsis, since it has already been implemented. Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D142814
2023-01-09[libc++][test] _VSTD => std:: in test codeCasey Carter1-1/+1
No `_VSTD` allowed in test code! Differential Revision: https://reviews.llvm.org/D141269
2022-12-15[libc++] Implement P1169R4 (static operator())Nikolas Klauser1-0/+41
Reviewed By: ldionne, huixie90, #libc Spies: EricWF, libcxx-commits, royjacobson Differential Revision: https://reviews.llvm.org/D135016
2022-12-14[libc++] Refactor .compile.fail.cpp tests for std::functionLouis Dionne3-37/+15
Some of those .compile.fail.cpp tests had become incorrect and they were not testing anything. In general, .compile.fail.cpp tests are bad because they make it way too easy to write garbage tests. Indeed, the test could fail to compile due to any reason whatsoever (even a typo) and it would appear to work correctly. Differential Revision: https://reviews.llvm.org/D138731
2022-10-19[libc++] Remove std::function in C++03Nikolas Klauser25-70/+46
We've said that we'll remove `std::function` from C++03 in LLVM 16, so we might as well do it now before we forget. Reviewed By: ldionne, #libc, Mordante Spies: jloser, Mordante, libcxx-commits Differential Revision: https://reviews.llvm.org/D135868
2022-10-03[libc++] Suppress -Wctad-maybe-unsupported on types w/o deduction guidesLouis Dionne5-2/+216
There are a handful of standard library types that are intended to support CTAD but don't need any explicit deduction guides to do so. This patch adds a dummy deduction guide to those types to suppress -Wctad-maybe-unsupported (which gets emitted in user code). This is a re-application of the original patch by Eric Fiselier in fcd549a7d828 which had been reverted due to reasons lost at this point. I also added the macro to a few more types. Reviving this patch was prompted by the discussion on https://llvm.org/D133425. Differential Revision: https://reviews.llvm.org/D133535