Function declaration with auto using new C++11 syntax but with auto& and without ->












2















consider the function definition below:



auto& Fnc1() { return someNonLocalVariable; }


Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.










share|improve this question

























  • This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.

    – Sam Varshavchik
    Jan 1 at 20:29






  • 2





    That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.

    – Ron
    Jan 1 at 20:29













  • usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context

    – mami
    Jan 1 at 20:33






  • 2





    The source

    – Igor Tandetnik
    Jan 1 at 20:36











  • auto is for deducing the "base" type only, without CV-qualifiers or references.

    – Some programmer dude
    Jan 1 at 20:36


















2















consider the function definition below:



auto& Fnc1() { return someNonLocalVariable; }


Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.










share|improve this question

























  • This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.

    – Sam Varshavchik
    Jan 1 at 20:29






  • 2





    That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.

    – Ron
    Jan 1 at 20:29













  • usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context

    – mami
    Jan 1 at 20:33






  • 2





    The source

    – Igor Tandetnik
    Jan 1 at 20:36











  • auto is for deducing the "base" type only, without CV-qualifiers or references.

    – Some programmer dude
    Jan 1 at 20:36
















2












2








2








consider the function definition below:



auto& Fnc1() { return someNonLocalVariable; }


Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.










share|improve this question
















consider the function definition below:



auto& Fnc1() { return someNonLocalVariable; }


Return type is not explicitly specified by -> in this case.
But there is the & after auto keyword.
Does this guarantee that a reference is returned instead of copy of the variable?
Is this a supported language feature (returning reference)?
With VS 2017, it works as I expect: Return a reference.
But I could not find any online source to verify.







c++ c++14 auto function-declaration return-type-deduction






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 1 at 20:51









Deduplicator

34.7k64990




34.7k64990










asked Jan 1 at 20:27









mamimami

4916




4916













  • This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.

    – Sam Varshavchik
    Jan 1 at 20:29






  • 2





    That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.

    – Ron
    Jan 1 at 20:29













  • usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context

    – mami
    Jan 1 at 20:33






  • 2





    The source

    – Igor Tandetnik
    Jan 1 at 20:36











  • auto is for deducing the "base" type only, without CV-qualifiers or references.

    – Some programmer dude
    Jan 1 at 20:36





















  • This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.

    – Sam Varshavchik
    Jan 1 at 20:29






  • 2





    That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.

    – Ron
    Jan 1 at 20:29













  • usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context

    – mami
    Jan 1 at 20:33






  • 2





    The source

    – Igor Tandetnik
    Jan 1 at 20:36











  • auto is for deducing the "base" type only, without CV-qualifiers or references.

    – Some programmer dude
    Jan 1 at 20:36



















This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.

– Sam Varshavchik
Jan 1 at 20:29





This is how C++ works. If a function returns a reference, that's what it returns. There are no exceptions.

– Sam Varshavchik
Jan 1 at 20:29




2




2





That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.

– Ron
Jan 1 at 20:29







That's a C++14+ code. Not C++11. RVO is guaranteed since C++17.

– Ron
Jan 1 at 20:29















usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context

– mami
Jan 1 at 20:33





usual syntax is said to be auto Fnc1() {...} Without &. I could not find any source that says I can use auto& beside auto in this context

– mami
Jan 1 at 20:33




2




2





The source

– Igor Tandetnik
Jan 1 at 20:36





The source

– Igor Tandetnik
Jan 1 at 20:36













auto is for deducing the "base" type only, without CV-qualifiers or references.

– Some programmer dude
Jan 1 at 20:36







auto is for deducing the "base" type only, without CV-qualifiers or references.

– Some programmer dude
Jan 1 at 20:36














1 Answer
1






active

oldest

votes


















6














Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (-> after the parameters).



See cppreference for more.




In a function declaration that does not use the trailing return type syntax, the keyword auto indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.




See also auto type deduction where they include an example using auto&. You can think of this as being the same set of rules for declaring variables using the auto keyword.






share|improve this answer

























    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/3.0/"u003ecc by-sa 3.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
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53998710%2ffunction-declaration-with-auto-using-new-c11-syntax-but-with-auto-and-without%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









    6














    Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (-> after the parameters).



    See cppreference for more.




    In a function declaration that does not use the trailing return type syntax, the keyword auto indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.




    See also auto type deduction where they include an example using auto&. You can think of this as being the same set of rules for declaring variables using the auto keyword.






    share|improve this answer






























      6














      Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (-> after the parameters).



      See cppreference for more.




      In a function declaration that does not use the trailing return type syntax, the keyword auto indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.




      See also auto type deduction where they include an example using auto&. You can think of this as being the same set of rules for declaring variables using the auto keyword.






      share|improve this answer




























        6












        6








        6







        Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (-> after the parameters).



        See cppreference for more.




        In a function declaration that does not use the trailing return type syntax, the keyword auto indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.




        See also auto type deduction where they include an example using auto&. You can think of this as being the same set of rules for declaring variables using the auto keyword.






        share|improve this answer















        Yes, this is the correct specification, and as Ron commented, became operational in C++14. C++11 did require trailing return type syntax (-> after the parameters).



        See cppreference for more.




        In a function declaration that does not use the trailing return type syntax, the keyword auto indicates that the return type will be deduced from the operand of its return statement using the rules for template argument deduction.




        See also auto type deduction where they include an example using auto&. You can think of this as being the same set of rules for declaring variables using the auto keyword.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jan 1 at 21:06

























        answered Jan 1 at 20:36









        rsjaffersjaffe

        3,95671632




        3,95671632
































            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53998710%2ffunction-declaration-with-auto-using-new-c11-syntax-but-with-auto-and-without%23new-answer', 'question_page');
            }
            );

            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







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith