[libcxx] [test] Fix invocable tests on Windows
authorMartin Storsjö <martin@martin.st>
Wed, 31 Mar 2021 06:17:00 +0000 (09:17 +0300)
committerMartin Storsjö <martin@martin.st>
Fri, 2 Apr 2021 07:49:27 +0000 (10:49 +0300)
MSVC had a bug regarding preferring intergral conversions over
floating conversions. This is fixed in MSVC 19.28 and newer. Clang in
MSVC mode so far only mimics the old, buggy behaviour, but will
hopefully soon be fixed to comply with the new behaviour too
(see https://reviews.llvm.org/D99663).

Make the negative test to use a distinctly different type,
leaving checks for compiler specific bugs out of the libcxx test.

Differential Revision: https://reviews.llvm.org/D99641

libcxx/test/std/concepts/concepts.callable/concept.invocable/invocable.compile.pass.cpp
libcxx/test/std/concepts/concepts.callable/concept.regularinvocable/regular_invocable.pass.cpp

index 7789c02..b485607 100644 (file)
@@ -229,12 +229,12 @@ struct multiple_overloads {
 static_assert(std::invocable<multiple_overloads&>);
 static_assert(std::invocable<multiple_overloads&, short>);
 static_assert(std::invocable<multiple_overloads&, int>);
-static_assert(!std::invocable<multiple_overloads&, long>);
+static_assert(!std::invocable<multiple_overloads&, long long>);
 static_assert(std::invocable<multiple_overloads&, double>);
 static_assert(std::invocable<multiple_overloads&, float>);
 static_assert(std::invocable<multiple_overloads&, short&>);
 static_assert(std::invocable<multiple_overloads&, int&>);
-static_assert(!std::invocable<multiple_overloads&, long&>);
+static_assert(!std::invocable<multiple_overloads&, long long>);
 static_assert(std::invocable<multiple_overloads&, float&>);
 static_assert(std::invocable<multiple_overloads&, double&>);
 } // namespace function_objects
index dd5d34c..4536dcc 100644 (file)
@@ -255,12 +255,12 @@ struct multiple_overloads {
 static_assert(std::regular_invocable<multiple_overloads&>);
 static_assert(std::regular_invocable<multiple_overloads&, short>);
 static_assert(std::regular_invocable<multiple_overloads&, int>);
-static_assert(!std::regular_invocable<multiple_overloads&, long>);
+static_assert(!std::regular_invocable<multiple_overloads&, long long>);
 static_assert(std::regular_invocable<multiple_overloads&, double>);
 static_assert(std::regular_invocable<multiple_overloads&, float>);
 static_assert(std::regular_invocable<multiple_overloads&, short&>);
 static_assert(std::regular_invocable<multiple_overloads&, int&>);
-static_assert(!std::regular_invocable<multiple_overloads&, long&>);
+static_assert(!std::regular_invocable<multiple_overloads&, long long&>);
 static_assert(std::regular_invocable<multiple_overloads&, float&>);
 static_assert(std::regular_invocable<multiple_overloads&, double&>);
 } // namespace function_objects