Can the return type of the function be obtained from within the function?

Multi tool use
Multi tool use

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
38
down vote

favorite
3












Can the return type of a function be obtained in a simple way within the function?



For example, given:



template <typename P>
static inline auto foo(P p) -> typename std::remove_reference<decltype(*p)>::type
typename std::remove_reference<decltype(*p)>::type f; // <-- here

...



In C++11 can I refer to the big nasty return type of foo, within foo itself, without repeating it, at the line marked // <-- here?










share|improve this question



















  • 1




    In C++14, you can remove the trailing return type instead, and use return f; to deduce the return type.
    – jingyu9575
    Sep 6 at 4:42














up vote
38
down vote

favorite
3












Can the return type of a function be obtained in a simple way within the function?



For example, given:



template <typename P>
static inline auto foo(P p) -> typename std::remove_reference<decltype(*p)>::type
typename std::remove_reference<decltype(*p)>::type f; // <-- here

...



In C++11 can I refer to the big nasty return type of foo, within foo itself, without repeating it, at the line marked // <-- here?










share|improve this question



















  • 1




    In C++14, you can remove the trailing return type instead, and use return f; to deduce the return type.
    – jingyu9575
    Sep 6 at 4:42












up vote
38
down vote

favorite
3









up vote
38
down vote

favorite
3






3





Can the return type of a function be obtained in a simple way within the function?



For example, given:



template <typename P>
static inline auto foo(P p) -> typename std::remove_reference<decltype(*p)>::type
typename std::remove_reference<decltype(*p)>::type f; // <-- here

...



In C++11 can I refer to the big nasty return type of foo, within foo itself, without repeating it, at the line marked // <-- here?










share|improve this question















Can the return type of a function be obtained in a simple way within the function?



For example, given:



template <typename P>
static inline auto foo(P p) -> typename std::remove_reference<decltype(*p)>::type
typename std::remove_reference<decltype(*p)>::type f; // <-- here

...



In C++11 can I refer to the big nasty return type of foo, within foo itself, without repeating it, at the line marked // <-- here?







c++ c++11 trailing-return-type






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Sep 5 at 18:24

























asked Sep 5 at 17:33









BeeOnRope

24k873162




24k873162







  • 1




    In C++14, you can remove the trailing return type instead, and use return f; to deduce the return type.
    – jingyu9575
    Sep 6 at 4:42












  • 1




    In C++14, you can remove the trailing return type instead, and use return f; to deduce the return type.
    – jingyu9575
    Sep 6 at 4:42







1




1




In C++14, you can remove the trailing return type instead, and use return f; to deduce the return type.
– jingyu9575
Sep 6 at 4:42




In C++14, you can remove the trailing return type instead, and use return f; to deduce the return type.
– jingyu9575
Sep 6 at 4:42












1 Answer
1






active

oldest

votes

















up vote
50
down vote



accepted










Call the function with a decltype.



decltype(foo(p)) f;





share|improve this answer
















  • 6




    life made easy by decltype ;)
    – JeJo
    Sep 5 at 18:18










  • Works well in this case where there are few parameters...
    – Max Langhof
    Sep 6 at 8:01










  • @MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
    – Rakete1111
    Sep 6 at 8:02










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',
convertImagesToLinks: true,
noModals: false,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52190625%2fcan-the-return-type-of-the-function-be-obtained-from-within-the-function%23new-answer', 'question_page');

);

Post as a guest






























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
50
down vote



accepted










Call the function with a decltype.



decltype(foo(p)) f;





share|improve this answer
















  • 6




    life made easy by decltype ;)
    – JeJo
    Sep 5 at 18:18










  • Works well in this case where there are few parameters...
    – Max Langhof
    Sep 6 at 8:01










  • @MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
    – Rakete1111
    Sep 6 at 8:02














up vote
50
down vote



accepted










Call the function with a decltype.



decltype(foo(p)) f;





share|improve this answer
















  • 6




    life made easy by decltype ;)
    – JeJo
    Sep 5 at 18:18










  • Works well in this case where there are few parameters...
    – Max Langhof
    Sep 6 at 8:01










  • @MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
    – Rakete1111
    Sep 6 at 8:02












up vote
50
down vote



accepted







up vote
50
down vote



accepted






Call the function with a decltype.



decltype(foo(p)) f;





share|improve this answer












Call the function with a decltype.



decltype(foo(p)) f;






share|improve this answer












share|improve this answer



share|improve this answer










answered Sep 5 at 17:35









Rakete1111

32.7k975110




32.7k975110







  • 6




    life made easy by decltype ;)
    – JeJo
    Sep 5 at 18:18










  • Works well in this case where there are few parameters...
    – Max Langhof
    Sep 6 at 8:01










  • @MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
    – Rakete1111
    Sep 6 at 8:02












  • 6




    life made easy by decltype ;)
    – JeJo
    Sep 5 at 18:18










  • Works well in this case where there are few parameters...
    – Max Langhof
    Sep 6 at 8:01










  • @MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
    – Rakete1111
    Sep 6 at 8:02







6




6




life made easy by decltype ;)
– JeJo
Sep 5 at 18:18




life made easy by decltype ;)
– JeJo
Sep 5 at 18:18












Works well in this case where there are few parameters...
– Max Langhof
Sep 6 at 8:01




Works well in this case where there are few parameters...
– Max Langhof
Sep 6 at 8:01












@MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
– Rakete1111
Sep 6 at 8:02




@MaxLanghof Yes. The more general solution would be to define an alias and use that. :)
– Rakete1111
Sep 6 at 8:02

















 

draft saved


draft discarded















































 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52190625%2fcan-the-return-type-of-the-function-be-obtained-from-within-the-function%23new-answer', 'question_page');

);

Post as a guest













































































jSxK8VTA64fllFH,H1B,REN,8zI,gV V4ld,J3Q6DdUWT1vGo8PBjZjUD
oNrKZuj7l,f00zbMyqjwNC,n 2oJJfO K5uF,s2T0DMWwjQRvR,M3 GVRypCM

Popular posts from this blog

How to check contact read email or not when send email to Individual?

How many registers does an x86_64 CPU actually have?

Displaying single band from multi-band raster using QGIS