diff --git a/src/lib/AST/ASTVisitor.cpp b/src/lib/AST/ASTVisitor.cpp index 05f3956be7..2ba05ca624 100644 --- a/src/lib/AST/ASTVisitor.cpp +++ b/src/lib/AST/ASTVisitor.cpp @@ -872,6 +872,20 @@ populate( } else { + // Return type SFINAE constraints + if (I.ReturnType && + !I.ReturnType->Constraints.empty()) + { + for (ExprInfo const& constraint: I.ReturnType->Constraints) + { + if (!I.Requires.Written.empty()) + { + I.Requires.Written += " && "; + } + I.Requires.Written += constraint.Written; + } + } + // Iterate I.Params to find trailing requires clauses for (auto it = I.Params.begin(); it != I.Params.end(); ) { diff --git a/test-files/golden-tests/core/libcxx.adoc b/test-files/golden-tests/core/libcxx.adoc index 4b3178f4be..3f74a36792 100644 --- a/test-files/golden-tests/core/libcxx.adoc +++ b/test-files/golden-tests/core/libcxx.adoc @@ -31,7 +31,8 @@ Declared in `<libcxx.cpp>` ---- template<typename T> T -sqrt(T value); +sqrt(T value) +requires std::is_integral_v<T>; ---- === Description diff --git a/test-files/golden-tests/core/libcxx.html b/test-files/golden-tests/core/libcxx.html index a2f4bce734..e796448704 100644 --- a/test-files/golden-tests/core/libcxx.html +++ b/test-files/golden-tests/core/libcxx.html @@ -41,7 +41,8 @@
template<typename T>
T
-sqrt(T value);
+sqrt(T value)
+requires std::is_integral_v<T>;
diff --git a/test-files/golden-tests/core/libcxx.xml b/test-files/golden-tests/core/libcxx.xml
index f961338fbd..8db6bbd8c9 100644
--- a/test-files/golden-tests/core/libcxx.xml
+++ b/test-files/golden-tests/core/libcxx.xml
@@ -4,7 +4,7 @@
template<class T>
T
-f1(T value);
+f1(T value)
+requires std::is_integral_v<T>;
@@ -343,7 +344,8 @@
template<class T>
int
-f2(T value);
+f2(T value)
+requires std::is_integral_v<T>;
@@ -365,7 +367,8 @@
template<class T>
B::C
-f3(T value);
+f3(T value)
+requires std::is_integral_v<T>;
@@ -387,7 +390,8 @@
template<class T>
T
-f4(T value);
+f4(T value)
+requires std::is_integral_v<T>;
diff --git a/test-files/golden-tests/metadata/sfinae.xml b/test-files/golden-tests/metadata/sfinae.xml
index 5289f1e46f..27a60ee985 100644
--- a/test-files/golden-tests/metadata/sfinae.xml
+++ b/test-files/golden-tests/metadata/sfinae.xml
@@ -4,7 +4,7 @@
template<typename T>
T
-sqrt(T value);
+sqrt(T value)
+requires std::is_integral_v<T>;
diff --git a/test-files/golden-tests/snippets/sqrt.xml b/test-files/golden-tests/snippets/sqrt.xml
index c9dc1b9a2a..1a423974b8 100644
--- a/test-files/golden-tests/snippets/sqrt.xml
+++ b/test-files/golden-tests/snippets/sqrt.xml
@@ -4,7 +4,7 @@