Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update test files after recent merge #941

Merged
merged 1 commit into from
Jan 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
mixed-bugfix-for-ufcs-non-local.cpp2:13:12: error: a lambda expression cannot appear in this context
template<t<CPP2_UFCS_NONLOCAL(f)(o)> _> bool inline constexpr v0 = false;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_1> bool inline constexpr v0 = false;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
^
../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL'
#define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__)
Expand All @@ -17,7 +17,7 @@ t<CPP2_UFCS_NONLOCAL(f)(o)> inline constexpr v1 = t<true>();// Fails on Clang 12
#define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \
^
mixed-bugfix-for-ufcs-non-local.cpp2:21:12: error: a lambda expression cannot appear in this context
template<t<CPP2_UFCS_NONLOCAL(f)(o)> _> auto g() -> void;
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_2> auto g() -> void;
^
../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL'
#define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__)
Expand All @@ -44,7 +44,7 @@ mixed-bugfix-for-ufcs-non-local.cpp2:27:29: error: a lambda expression cannot ap
#define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \
^
mixed-bugfix-for-ufcs-non-local.cpp2:31:12: error: a lambda expression cannot appear in this context
template<t<CPP2_UFCS_NONLOCAL(f)(o)> _> using a = bool;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_3> using a = bool;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
^
../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL'
#define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__)
Expand All @@ -53,7 +53,7 @@ template<t<CPP2_UFCS_NONLOCAL(f)(o)> _> using a = bool;// Fails on GCC ([GCC1097
#define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \
^
mixed-bugfix-for-ufcs-non-local.cpp2:33:12: error: a lambda expression cannot appear in this context
template<t<CPP2_UFCS_NONLOCAL(f)(o)> _> auto inline constexpr b = false;// Fails on GCC ([GCC109781][]).
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_4> auto inline constexpr b = false;// Fails on GCC ([GCC109781][]).
^
../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL'
#define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__)
Expand All @@ -80,7 +80,7 @@ auto inline constexpr d = t<CPP2_UFCS_NONLOCAL(f)(o)>();// Fails on Clang 12 (la
#define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \
^
mixed-bugfix-for-ufcs-non-local.cpp2:21:12: error: a lambda expression cannot appear in this context
template<t<CPP2_UFCS_NONLOCAL(f)(o)> _> auto g() -> void{}// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_2> auto g() -> void{}// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
^
../../../include/cpp2util.h:885:59: note: expanded from macro 'CPP2_UFCS_NONLOCAL'
#define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ plu
abr
3.14word-1500
first all() returned false
second all() returned true
second all() returned true
sum of (1, 2, 3, 100) is: 106
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ abr
3.14word-1500
first all() returned false
second all() returned true
sum of (1, 2, 3, 100) is: 106
sum of (1, 2, 3, 100) is: 106
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ namespace ns {

// Variables.

template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_13_6> bool inline constexpr v0 = false;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_1> bool inline constexpr v0 = false;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)

t<CPP2_UFCS_NONLOCAL(f)(o)> inline constexpr v1 = t<true>();// Fails on Clang 12 (lambda in unevaluated context).

bool inline constexpr v2 = CPP2_UFCS_NONLOCAL(f)(o);

// Functions.

template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_21_5> auto g() -> void;
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_2> auto g() -> void;

auto g([[maybe_unused]] cpp2::in<t<CPP2_UFCS_NONLOCAL(f)(o)>> unnamed_param_1) -> void;

Expand All @@ -52,9 +52,9 @@ auto g() -> void;

// Aliases.

template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_31_5> using a = bool;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_3> using a = bool;// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)

template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_33_5> auto inline constexpr b = false;// Fails on GCC ([GCC109781][]).
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_4> auto inline constexpr b = false;// Fails on GCC ([GCC109781][]).

using c = t<CPP2_UFCS_NONLOCAL(f)(o)>;// Fails on Clang 12 (lambda in unevaluated context) and Clang 12 (a lambda expression cannot appear in this context)

Expand All @@ -81,7 +81,7 @@ auto main() -> int;
namespace ns {

#line 21 "mixed-bugfix-for-ufcs-non-local.cpp2"
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_21_5> auto g() -> void{}// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)
template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_2> auto g() -> void{}// Fails on GCC ([GCC109781][]) and Clang 12 (a lambda expression cannot appear in this context)

#line 23 "mixed-bugfix-for-ufcs-non-local.cpp2"
auto g([[maybe_unused]] cpp2::in<t<CPP2_UFCS_NONLOCAL(f)(o)>> unnamed_param_1) -> void{}// Fails on Clang 12 (lambda in unevaluated context).
Expand Down
74 changes: 40 additions & 34 deletions regression-tests/test-results/pure2-bugfix-for-ufcs-arguments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,38 +35,38 @@ class B;
class t {
public: [[nodiscard]] auto f() & -> cpp2::i32;
public: [[nodiscard]] auto f([[maybe_unused]] auto const& unnamed_param_2) & -> cpp2::i32;
public: template<typename UnnamedTypeParam1_10_7> [[nodiscard]] auto f() & -> cpp2::i32;
public: template<typename UnnamedTypeParam1_11_7> [[nodiscard]] auto f([[maybe_unused]] auto const& unnamed_param_2) & -> cpp2::i32;
public: template<typename UnnamedTypeParam1_12_7, typename U> [[nodiscard]] auto f([[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) & -> cpp2::i32;
public: template<typename UnnamedTypeParam1_1> [[nodiscard]] auto f() & -> cpp2::i32;
public: template<typename UnnamedTypeParam1_2> [[nodiscard]] auto f([[maybe_unused]] auto const& unnamed_param_2) & -> cpp2::i32;
public: template<typename UnnamedTypeParam1_3, typename U> [[nodiscard]] auto f([[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) & -> cpp2::i32;
};

[[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1) -> cpp2::i32;
[[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2) -> cpp2::i32;
template<typename UnnamedTypeParam1_17_5> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1) -> cpp2::i32;
template<typename UnnamedTypeParam1_18_5> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2) -> cpp2::i32;
template<typename UnnamedTypeParam1_19_5, typename U> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) -> cpp2::i32;
template<typename UnnamedTypeParam1_4> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1) -> cpp2::i32;
template<typename UnnamedTypeParam1_5> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2) -> cpp2::i32;
template<typename UnnamedTypeParam1_6, typename U> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) -> cpp2::i32;

extern t m;
extern t const n;
template<typename UnnamedTypeParam1_23_5, typename U> auto inline constexpr a = n;

extern cpp2::i32 auto_1;
extern cpp2::i32 auto_2;
extern cpp2::i32 auto_3;
extern cpp2::i32 auto_4;
extern cpp2::i32 auto_5;
extern cpp2::i32 auto_6;
extern cpp2::i32 auto_7;
template<typename UnnamedTypeParam1_7, typename U> auto inline constexpr a = n;

extern cpp2::i32 auto_8;
extern cpp2::i32 auto_9;
extern cpp2::i32 auto_10;
extern cpp2::i32 auto_11;
extern cpp2::i32 auto_12;
extern cpp2::i32 auto_13;
extern cpp2::i32 auto_14;
extern cpp2::i32 auto_15;
extern cpp2::i32 auto_16;
extern cpp2::i32 auto_17;
extern cpp2::i32 auto_18;

auto main() -> int;

#line 55 "pure2-bugfix-for-ufcs-arguments.cpp2"
// _: i32 = 0.std::min<int>(0);
extern cpp2::i32 auto_12;
extern cpp2::i32 auto_19;

namespace ns {
template<int T, int U> class t {
Expand Down Expand Up @@ -98,33 +98,39 @@ class B {
[[nodiscard]] auto t::f() & -> cpp2::i32 { return print_res(0); }
#line 9 "pure2-bugfix-for-ufcs-arguments.cpp2"
[[nodiscard]] auto t::f([[maybe_unused]] auto const& unnamed_param_2) & -> cpp2::i32 { return print_res(1); }
template<typename UnnamedTypeParam1_10_7> [[nodiscard]] auto t::f() & -> cpp2::i32 { return print_res(2); }
template<typename UnnamedTypeParam1_11_7> [[nodiscard]] auto t::f([[maybe_unused]] auto const& unnamed_param_2) & -> cpp2::i32 { return print_res(3); }
template<typename UnnamedTypeParam1_12_7, typename U> [[nodiscard]] auto t::f([[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) & -> cpp2::i32 { return print_res(4); }
#line 10 "pure2-bugfix-for-ufcs-arguments.cpp2"
template<typename UnnamedTypeParam1_1> [[nodiscard]] auto t::f() & -> cpp2::i32 { return print_res(2); }
#line 11 "pure2-bugfix-for-ufcs-arguments.cpp2"
template<typename UnnamedTypeParam1_2> [[nodiscard]] auto t::f([[maybe_unused]] auto const& unnamed_param_2) & -> cpp2::i32 { return print_res(3); }
#line 12 "pure2-bugfix-for-ufcs-arguments.cpp2"
template<typename UnnamedTypeParam1_3, typename U> [[nodiscard]] auto t::f([[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) & -> cpp2::i32 { return print_res(4); }

#line 15 "pure2-bugfix-for-ufcs-arguments.cpp2"
[[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1) -> cpp2::i32 { return print_res(5); }
#line 16 "pure2-bugfix-for-ufcs-arguments.cpp2"
[[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2) -> cpp2::i32 { return print_res(6); }
template<typename UnnamedTypeParam1_17_5> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1) -> cpp2::i32 { return print_res(7); }
template<typename UnnamedTypeParam1_18_5> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2) -> cpp2::i32 { return print_res(8); }
template<typename UnnamedTypeParam1_19_5, typename U> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) -> cpp2::i32 { return print_res(9); }
#line 17 "pure2-bugfix-for-ufcs-arguments.cpp2"
template<typename UnnamedTypeParam1_4> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1) -> cpp2::i32 { return print_res(7); }
#line 18 "pure2-bugfix-for-ufcs-arguments.cpp2"
template<typename UnnamedTypeParam1_5> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2) -> cpp2::i32 { return print_res(8); }
#line 19 "pure2-bugfix-for-ufcs-arguments.cpp2"
template<typename UnnamedTypeParam1_6, typename U> [[nodiscard]] auto f([[maybe_unused]] cpp2::in<t> unnamed_param_1, [[maybe_unused]] auto const& unnamed_param_2, [[maybe_unused]] auto const& unnamed_param_3) -> cpp2::i32 { return print_res(9); }

t m {};
t const n {};

#line 25 "pure2-bugfix-for-ufcs-arguments.cpp2"
cpp2::i32 auto_1 {CPP2_UFCS_NONLOCAL(f)(m)};
cpp2::i32 auto_2 {CPP2_UFCS_NONLOCAL(f)(m, 0)};
cpp2::i32 auto_3 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(m)};
cpp2::i32 auto_4 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(m, 0)};
cpp2::i32 auto_5 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t,t>)(m, 0, 0)};
cpp2::i32 auto_6 {CPP2_UFCS_NONLOCAL(f)(n)};
cpp2::i32 auto_7 {CPP2_UFCS_NONLOCAL(f)(n, 0)};
cpp2::i32 auto_8 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(n)};
cpp2::i32 auto_9 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(n, 0)};
cpp2::i32 auto_10 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t,t>)(n, 0, 0)};
cpp2::i32 auto_11 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t,t>)(a<t,t>, 0, 0)};
cpp2::i32 auto_8 {CPP2_UFCS_NONLOCAL(f)(m)};
cpp2::i32 auto_9 {CPP2_UFCS_NONLOCAL(f)(m, 0)};
cpp2::i32 auto_10 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(m)};
cpp2::i32 auto_11 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(m, 0)};
cpp2::i32 auto_12 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t,t>)(m, 0, 0)};
cpp2::i32 auto_13 {CPP2_UFCS_NONLOCAL(f)(n)};
cpp2::i32 auto_14 {CPP2_UFCS_NONLOCAL(f)(n, 0)};
cpp2::i32 auto_15 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(n)};
cpp2::i32 auto_16 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t>)(n, 0)};
cpp2::i32 auto_17 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t,t>)(n, 0, 0)};
cpp2::i32 auto_18 {CPP2_UFCS_TEMPLATE_NONLOCAL(f<t,t>)(a<t,t>, 0, 0)};

#line 37 "pure2-bugfix-for-ufcs-arguments.cpp2"
auto main() -> int{
Expand All @@ -146,7 +152,7 @@ auto main() -> int{
}

#line 56 "pure2-bugfix-for-ufcs-arguments.cpp2"
cpp2::i32 auto_12 {CPP2_UFCS_QUALIFIED_TEMPLATE_NONLOCAL((ns::t<0,0>::),f<0>)(0)};
cpp2::i32 auto_19 {CPP2_UFCS_QUALIFIED_TEMPLATE_NONLOCAL((ns::t<0,0>::),f<0>)(0)};

namespace ns {

Expand Down
28 changes: 14 additions & 14 deletions regression-tests/test-results/pure2-variadics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ template<typename ...Ts> class x;
template<int ...Ts> class y;

#line 16 "pure2-variadics.cpp2"
template<typename ...UnnamedTypeParam1_16_14> class t0;
template<typename ...UnnamedTypeParam1_1> class t0;


#line 21 "pure2-variadics.cpp2"
template<auto ...T> class t1;


#line 26 "pure2-variadics.cpp2"
template<auto ...UnnamedTypeParam1_26_14> class t2;
template<auto ...UnnamedTypeParam1_2> class t2;


//=== Cpp2 type definitions and function declarations ===========================
Expand Down Expand Up @@ -56,18 +56,18 @@ template<int ...Ts> class y {
};

// Discard type name pack expansion
template<typename ...UnnamedTypeParam1_16_14> class t0 {
public: template<int UnnamedTypeParam1_17_7> [[nodiscard]] static auto f() -> cpp2::i32;
template<typename ...UnnamedTypeParam1_1> class t0 {
public: template<int UnnamedTypeParam1_3> [[nodiscard]] static auto f() -> cpp2::i32;
};

// Discard template type pack expansion
template<auto ...T> class t1 {
public: template<int UnnamedTypeParam1_22_7> [[nodiscard]] static auto f() -> cpp2::i32;
public: template<int UnnamedTypeParam1_4> [[nodiscard]] static auto f() -> cpp2::i32;
};

// Discard typename and template type pack expansion
template<auto ...UnnamedTypeParam1_26_14> class t2 {
public: template<int UnnamedTypeParam1_27_7> [[nodiscard]] static auto f() -> cpp2::i32;
template<auto ...UnnamedTypeParam1_2> class t2 {
public: template<int UnnamedTypeParam1_5> [[nodiscard]] static auto f() -> cpp2::i32;
};

template<typename ...Args> auto left_fold_print(std::ostream& out, Args const& ...args) -> void;
Expand All @@ -93,32 +93,32 @@ auto main() -> int;
template <int ...Ts> [[nodiscard]] auto y<Ts...>::func() -> auto { return (0 + ... + Ts); }

#line 17 "pure2-variadics.cpp2"
template <typename ...UnnamedTypeParam1_16_14> template<int UnnamedTypeParam1_17_7> [[nodiscard]] auto t0<UnnamedTypeParam1_16_14...>::f() -> cpp2::i32 { return 0; }
template <typename ...UnnamedTypeParam1_1> template<int UnnamedTypeParam1_3> [[nodiscard]] auto t0<UnnamedTypeParam1_1...>::f() -> cpp2::i32 { return 0; }

#line 22 "pure2-variadics.cpp2"
template <auto ...T> template<int UnnamedTypeParam1_22_7> [[nodiscard]] auto t1<T...>::f() -> cpp2::i32 { return 0; }
template <auto ...T> template<int UnnamedTypeParam1_4> [[nodiscard]] auto t1<T...>::f() -> cpp2::i32 { return 0; }

#line 27 "pure2-variadics.cpp2"
template <auto ...UnnamedTypeParam1_26_14> template<int UnnamedTypeParam1_27_7> [[nodiscard]] auto t2<UnnamedTypeParam1_26_14...>::f() -> cpp2::i32 { return 0; }
template <auto ...UnnamedTypeParam1_2> template<int UnnamedTypeParam1_5> [[nodiscard]] auto t2<UnnamedTypeParam1_2...>::f() -> cpp2::i32 { return 0; }

#line 30 "pure2-variadics.cpp2"
template<typename ...Args> auto left_fold_print(std::ostream& out, Args const& ...args) -> void{
// Binary left fold expression
(out << ... << args);
}

#line 14 "pure2-variadics.cpp2"
#line 35 "pure2-variadics.cpp2"
template<typename ...Args> [[nodiscard]] auto all(Args const& ...args) -> bool {
// Unary left fold expression
return (... && args); }

#line 18 "pure2-variadics.cpp2"
#line 39 "pure2-variadics.cpp2"
template <typename ...Args> [[nodiscard]] auto make_string(Args&& ...args) -> auto { return std::string{CPP2_FORWARD(args)...}; }

#line 20 "pure2-variadics.cpp2"
#line 41 "pure2-variadics.cpp2"
template <typename T, typename ...Args> [[nodiscard]] auto make(Args&& ...args) -> auto { return T{CPP2_FORWARD(args)...}; }

#line 22 "pure2-variadics.cpp2"
#line 43 "pure2-variadics.cpp2"
auto main() -> int
{
x<int,long,std::string> auto_1 {};
Expand Down