[libcxx-commits] [libcxx] [libc++][ratio] Avoids accepting unrelated types. (PR #80491)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Feb 6 11:46:11 PST 2024
================
@@ -0,0 +1,77 @@
+//===----------------------------------------------------------------------===//
+//
+// 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++17
+
+// <ratio>
+//
+// [ratio.general]/2
+// Throughout subclause [ratio], the names of template parameters are
+// used to express type requirements. If a template parameter is named
+// R1 or R2, and the template argument is not a specialization of the
+// ratio template, the program is ill-formed.
+//
+// Since std::ratio_xxx uses the same instantiations only one error
+// will be generated. These types are tested in a separate test.
+
+#include <ratio>
+
+struct R {
+ constexpr static int num = 1;
+ constexpr static int den = 1;
+};
+
+using r = std::ratio<1, 1>;
+
+namespace equal {
----------------
ldionne wrote:
You could write those in a function like
```c++
void test() {
{
(void)std::ratio_equal_v<r, r>;
...
}
{
// same for ratio_not_equal
}
// etc...
}
```
https://github.com/llvm/llvm-project/pull/80491
More information about the libcxx-commits
mailing list