-
Notifications
You must be signed in to change notification settings - Fork 251
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
[BUG] Recognize non-deducible parameter #534
Labels
bug
Something isn't working
Comments
JohelEGP
changed the title
[BUG] Use
[BUG] Recognize non-deducible parameter
Jul 3, 2023
cpp2::in
for non-deducible parameters
Title: Recognize non-deducible parameter. Description: The report generalizes. Minimal reproducer (https://cpp2.godbolt.org/z/Tnvczs8qa):
Commands:cppfront main.cpp2
clang++17 -std=c++23 -stdlib=libc++ -lc++abi -pedantic-errors -Wall -Wextra -Wconversion -I . main.cpp Expected result: template<typename T> auto f(cpp2::out<std::integral_constant<cpp2::i32, T::value>> x) -> void; Actual result and error: template<typename T> auto f(std::integral_constant<cpp2::i32,T::value> x_) -> void; Cpp2 lowered to Cpp1://=== Cpp2 type declarations ====================================================
#include "cpp2util.h"
//=== Cpp2 type definitions and function declarations ===========================
template<typename T> auto f(std::integral_constant<cpp2::i32,T::value> x_) -> void;
auto main() -> int;
//=== Cpp2 function definitions =================================================
template<typename T> auto f(std::integral_constant<cpp2::i32,T::value> x_) -> void{
auto x = cpp2::out(x_);
x.construct(); }
auto main() -> int{
using t = std::integral_constant<cpp2::i32,0>;
cpp2::deferred_init<t> i;
f<t>(cpp2::out(&i));
} Output:
|
See #533 (comment) for the source of the bug. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Title: Use
cpp2::in
for non-deducible parameters.Description:
Currently, Cppfront doesn't wrap in$F$ 's function parameter$F$ 's template parameter
cpp2::in
a template function
that has the type of one of
to avoid making it non-deducible.
However, it also does the same$F$ 's template parameter
when a similar use of
makes the function parameter non-deducible.
If a function parameter is already non-deducible,
its type should be wrapped in
cpp2::in
.Minimal reproducer (https://cpp2.godbolt.org/z/jjxTWfcfq):
Commands:
cppfront main.cpp2 clang++17 -std=c++23 -stdlib=libc++ -lc++abi -pedantic-errors -Wall -Wextra -Wconversion -I . main.cpp
Expected result:
Actual result and error:
Cpp2 lowered to Cpp1:
The text was updated successfully, but these errors were encountered: