Skip to content

Commit 4c631df

Browse files
committed
fix(parse): accept short constexpr function with requires
1 parent d869eed commit 4c631df

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

regression-tests/pure2-requires-clauses.cpp2

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@ f: <T: type, U: type>
1515
return a * b;
1616
}
1717

18+
f: (x) -> int requires true == x;
19+
1820
v: <T> const T requires std::same_as<T, i32> = 0;
1921

2022
main: () = {
2123
_: X<int,int> = ();
22-
std::cout << f<int,int>(2,5);
24+
std::cout << f<int,int>(2,5)
25+
<< f(0);
2326
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
10
1+
100

regression-tests/test-results/pure2-requires-clauses.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,14 @@ CPP2_REQUIRES (std::is_same_v<T,int> && std::is_same_v<U,int> && std::is_same_v<
3838
;
3939

4040
#line 18 "pure2-requires-clauses.cpp2"
41+
[[nodiscard]] constexpr auto f(auto const& x) -> int
42+
CPP2_REQUIRES (true) ;
43+
44+
#line 20 "pure2-requires-clauses.cpp2"
4145
template<typename T>
4246
CPP2_REQUIRES_ (std::same_as<T,cpp2::i32>) extern T const v;
4347

44-
#line 20 "pure2-requires-clauses.cpp2"
48+
#line 22 "pure2-requires-clauses.cpp2"
4549
auto main() -> int;
4650

4751
//=== Cpp2 function definitions =================================================
@@ -61,12 +65,17 @@ requires (std::is_same_v<T,int> && std::is_same_v<U,int> && std::is_same_v<CPP2_
6165
return CPP2_FORWARD(a) * CPP2_FORWARD(b);
6266
}
6367

68+
[[nodiscard]] constexpr auto f(auto const& x) -> int
69+
requires (true) { return x; }
70+
71+
#line 20 "pure2-requires-clauses.cpp2"
6472
template<typename T>
6573
requires (std::same_as<T,cpp2::i32>) T const v {0};
6674

67-
#line 20 "pure2-requires-clauses.cpp2"
75+
#line 22 "pure2-requires-clauses.cpp2"
6876
auto main() -> int{
69-
X<int,int> auto_21_5 {};
70-
std::cout << f<int,int>(2, 5);
77+
X<int,int> auto_23_5 {};
78+
std::cout << f<int,int>(2, 5)
79+
<< f(0);
7180
}
7281

source/parse.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4962,7 +4962,7 @@ auto pretty_print_visualize(declaration_node const& n, int indent, bool include_
49624962

49634963
auto metafunctions = std::string{};
49644964
{
4965-
auto as_comment =
4965+
auto as_comment =
49664966
!n.metafunctions.empty()
49674967
&& !include_metafunctions_list;
49684968
if (as_comment) {
@@ -8315,7 +8315,7 @@ class parser
83158315

83168316
n->requires_pos = curr().position();
83178317
next();
8318-
auto e = logical_or_expression();
8318+
auto e = logical_or_expression(true, false);
83198319
if (!e) {
83208320
error("'requires' must be followed by an expression");
83218321
return {};

0 commit comments

Comments
 (0)