Lambda functions with template parameters, not in function parametersWhat is a lambda (function)?How do I test a private function or a class that has private methods, fields or inner classes?Why can templates only be implemented in the header file?Where and why do I have to put the “template” and “typename” keywords?Distinct() with lambda?Can lambda functions be templated?What is a lambda expression in C++11?Replacing a 32-bit loop counter with 64-bit introduces crazy performance deviations
What happens to a net with the Returning Weapon artificer infusion after it hits?
How much horsepower to weight is required for a 1:1 thrust ratio
What is Weapon Handling?
Why Italian monolingual dictionaries usually take complex/archaic examples from books instead of creating simple examples?
Another student has been assigned the same MSc thesis as mine (and already defended)
Top off gas with old oil, is that bad?
Convert a string of digits from words to an integer
Lost passport which have valid student visa but I make new passport unable paste
Whaling ship logistics
"I will not" or "I don't" as an answer for negative orders?
Why isn't there armor to protect from spells in the Potterverse?
Do interval ratios take overtones into account or solely the fundamental frequency?
Received a package but didn't order it
Problematic Nature of Views
Why aren't faces sharp in my f/1.8 portraits even though I'm carefully using center-point autofocus?
Does variance make sense in a fully immutable language?
Delete n lines skip 1 line script
Why does Captain Marvel in the MCU not have her sash?
Would an object shot from earth fall into the sun?
Can I exile my opponent's Progenitus/True-Name Nemesis with Teferi, Hero of Dominaria's emblem?
How To: Refresh environment A(QA) from environment B(Prod) after they're out of sync
An impressive body of work
Fix Ethernet 10/100 PoE cable with 7 out of 8 wires alive
London Congestion Charge on A205
Lambda functions with template parameters, not in function parameters
What is a lambda (function)?How do I test a private function or a class that has private methods, fields or inner classes?Why can templates only be implemented in the header file?Where and why do I have to put the “template” and “typename” keywords?Distinct() with lambda?Can lambda functions be templated?What is a lambda expression in C++11?Replacing a 32-bit loop counter with 64-bit introduces crazy performance deviations
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
Why does the first call not compile?
auto get1 = []<int B>() return B; ;
auto get2 = []<typename B>(B b) return b; ;
int main()
get1<5>(); // error: no match for operator<
get2(5); // ok
The reason I use this, is an expression repeated many times in code.
Of course I can use a real function function, but just I am curious WHY.
c++ templates lambda c++20
add a comment
|
Why does the first call not compile?
auto get1 = []<int B>() return B; ;
auto get2 = []<typename B>(B b) return b; ;
int main()
get1<5>(); // error: no match for operator<
get2(5); // ok
The reason I use this, is an expression repeated many times in code.
Of course I can use a real function function, but just I am curious WHY.
c++ templates lambda c++20
add a comment
|
Why does the first call not compile?
auto get1 = []<int B>() return B; ;
auto get2 = []<typename B>(B b) return b; ;
int main()
get1<5>(); // error: no match for operator<
get2(5); // ok
The reason I use this, is an expression repeated many times in code.
Of course I can use a real function function, but just I am curious WHY.
c++ templates lambda c++20
Why does the first call not compile?
auto get1 = []<int B>() return B; ;
auto get2 = []<typename B>(B b) return b; ;
int main()
get1<5>(); // error: no match for operator<
get2(5); // ok
The reason I use this, is an expression repeated many times in code.
Of course I can use a real function function, but just I am curious WHY.
c++ templates lambda c++20
c++ templates lambda c++20
edited 9 hours ago
Barry
200k22 gold badges375 silver badges669 bronze badges
200k22 gold badges375 silver badges669 bronze badges
asked 9 hours ago
ChameleonChameleon
6191 gold badge5 silver badges13 bronze badges
6191 gold badge5 silver badges13 bronze badges
add a comment
|
add a comment
|
1 Answer
1
active
oldest
votes
This is easier to understand if you consider what the equivalent class type looks like to your get1:
struct get1_t
template <int B> operator()() const return B;
;
get1_t get1;
get1<5>(); // error
You're trying to provide an explicit template parameter to the call operator, but syntactically you're doing what looks like providing template parameters for get1 itself (i.e. as if get1 were a variable template). In order to provide the template parameter for the call operator, you have to do that directly:
get1.operator()<5>(); // ok
Or restructure the call operator to take something deducible:
template <int B> struct constant ;
get1(constant<5>);
Or restructure the whole thing to actually be the variable template that it looks like it is:
template <int B>
auto get1 = [] return B; ;
Now, get1<5> is itself a lambda, that you're invoking. That is, rather than a lambda with a call operator template we have a variable template lambda that is itself not a template.
add a comment
|
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f58064451%2flambda-functions-with-template-parameters-not-in-function-parameters%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
This is easier to understand if you consider what the equivalent class type looks like to your get1:
struct get1_t
template <int B> operator()() const return B;
;
get1_t get1;
get1<5>(); // error
You're trying to provide an explicit template parameter to the call operator, but syntactically you're doing what looks like providing template parameters for get1 itself (i.e. as if get1 were a variable template). In order to provide the template parameter for the call operator, you have to do that directly:
get1.operator()<5>(); // ok
Or restructure the call operator to take something deducible:
template <int B> struct constant ;
get1(constant<5>);
Or restructure the whole thing to actually be the variable template that it looks like it is:
template <int B>
auto get1 = [] return B; ;
Now, get1<5> is itself a lambda, that you're invoking. That is, rather than a lambda with a call operator template we have a variable template lambda that is itself not a template.
add a comment
|
This is easier to understand if you consider what the equivalent class type looks like to your get1:
struct get1_t
template <int B> operator()() const return B;
;
get1_t get1;
get1<5>(); // error
You're trying to provide an explicit template parameter to the call operator, but syntactically you're doing what looks like providing template parameters for get1 itself (i.e. as if get1 were a variable template). In order to provide the template parameter for the call operator, you have to do that directly:
get1.operator()<5>(); // ok
Or restructure the call operator to take something deducible:
template <int B> struct constant ;
get1(constant<5>);
Or restructure the whole thing to actually be the variable template that it looks like it is:
template <int B>
auto get1 = [] return B; ;
Now, get1<5> is itself a lambda, that you're invoking. That is, rather than a lambda with a call operator template we have a variable template lambda that is itself not a template.
add a comment
|
This is easier to understand if you consider what the equivalent class type looks like to your get1:
struct get1_t
template <int B> operator()() const return B;
;
get1_t get1;
get1<5>(); // error
You're trying to provide an explicit template parameter to the call operator, but syntactically you're doing what looks like providing template parameters for get1 itself (i.e. as if get1 were a variable template). In order to provide the template parameter for the call operator, you have to do that directly:
get1.operator()<5>(); // ok
Or restructure the call operator to take something deducible:
template <int B> struct constant ;
get1(constant<5>);
Or restructure the whole thing to actually be the variable template that it looks like it is:
template <int B>
auto get1 = [] return B; ;
Now, get1<5> is itself a lambda, that you're invoking. That is, rather than a lambda with a call operator template we have a variable template lambda that is itself not a template.
This is easier to understand if you consider what the equivalent class type looks like to your get1:
struct get1_t
template <int B> operator()() const return B;
;
get1_t get1;
get1<5>(); // error
You're trying to provide an explicit template parameter to the call operator, but syntactically you're doing what looks like providing template parameters for get1 itself (i.e. as if get1 were a variable template). In order to provide the template parameter for the call operator, you have to do that directly:
get1.operator()<5>(); // ok
Or restructure the call operator to take something deducible:
template <int B> struct constant ;
get1(constant<5>);
Or restructure the whole thing to actually be the variable template that it looks like it is:
template <int B>
auto get1 = [] return B; ;
Now, get1<5> is itself a lambda, that you're invoking. That is, rather than a lambda with a call operator template we have a variable template lambda that is itself not a template.
edited 8 hours ago
T.C.
111k14 gold badges229 silver badges338 bronze badges
111k14 gold badges229 silver badges338 bronze badges
answered 9 hours ago
BarryBarry
200k22 gold badges375 silver badges669 bronze badges
200k22 gold badges375 silver badges669 bronze badges
add a comment
|
add a comment
|
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f58064451%2flambda-functions-with-template-parameters-not-in-function-parameters%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown