C++20 modules TS: still need function declaration?










2















I hope a quick small question to those who tried C++20 modules



According to TS, should this code compile in C++20?



void f1() f2(); 
void f2() ...


For example, in C++11 it won't compile, because f1() doesn't "know" about the f2(), f2() must be declared before usage.



But maybe in C++20 this requirement will be eliminated in modules?



If the first code snippet is not compiled, will this one compile



void f1() f2(); 
export void f2() ...


because f2() will be seen from the BMI?










share|improve this question




























    2















    I hope a quick small question to those who tried C++20 modules



    According to TS, should this code compile in C++20?



    void f1() f2(); 
    void f2() ...


    For example, in C++11 it won't compile, because f1() doesn't "know" about the f2(), f2() must be declared before usage.



    But maybe in C++20 this requirement will be eliminated in modules?



    If the first code snippet is not compiled, will this one compile



    void f1() f2(); 
    export void f2() ...


    because f2() will be seen from the BMI?










    share|improve this question


























      2












      2








      2








      I hope a quick small question to those who tried C++20 modules



      According to TS, should this code compile in C++20?



      void f1() f2(); 
      void f2() ...


      For example, in C++11 it won't compile, because f1() doesn't "know" about the f2(), f2() must be declared before usage.



      But maybe in C++20 this requirement will be eliminated in modules?



      If the first code snippet is not compiled, will this one compile



      void f1() f2(); 
      export void f2() ...


      because f2() will be seen from the BMI?










      share|improve this question
















      I hope a quick small question to those who tried C++20 modules



      According to TS, should this code compile in C++20?



      void f1() f2(); 
      void f2() ...


      For example, in C++11 it won't compile, because f1() doesn't "know" about the f2(), f2() must be declared before usage.



      But maybe in C++20 this requirement will be eliminated in modules?



      If the first code snippet is not compiled, will this one compile



      void f1() f2(); 
      export void f2() ...


      because f2() will be seen from the BMI?







      c++ module function-declaration c++20






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 14 '18 at 21:04









      Barry

      183k20318583




      183k20318583










      asked Nov 14 '18 at 19:49









      Alek86Alek86

      824722




      824722






















          1 Answer
          1






          active

          oldest

          votes


















          5














          Modules are not yet in C++20. They may end up there, but they are not there yet.



          That said, while Modules does change many things about name lookup (the latest paper I'm aware of is P1103R1), Modules will not change the fundamental property of C++ that names must be declared before use (modulo things like dependent unqualified calls - which simply delays the lookup, but it still has to actually happen).



          This:




          void f1() f2(); 
          export void f2() ...



          will still be a compile error if there is no previous declaration of f2 or it wasn't imported from somewhere. You'll have to write:



          export void f2() ... 
          void f1() f2();





          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%2f53307773%2fc20-modules-ts-still-need-function-declaration%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









            5














            Modules are not yet in C++20. They may end up there, but they are not there yet.



            That said, while Modules does change many things about name lookup (the latest paper I'm aware of is P1103R1), Modules will not change the fundamental property of C++ that names must be declared before use (modulo things like dependent unqualified calls - which simply delays the lookup, but it still has to actually happen).



            This:




            void f1() f2(); 
            export void f2() ...



            will still be a compile error if there is no previous declaration of f2 or it wasn't imported from somewhere. You'll have to write:



            export void f2() ... 
            void f1() f2();





            share|improve this answer





























              5














              Modules are not yet in C++20. They may end up there, but they are not there yet.



              That said, while Modules does change many things about name lookup (the latest paper I'm aware of is P1103R1), Modules will not change the fundamental property of C++ that names must be declared before use (modulo things like dependent unqualified calls - which simply delays the lookup, but it still has to actually happen).



              This:




              void f1() f2(); 
              export void f2() ...



              will still be a compile error if there is no previous declaration of f2 or it wasn't imported from somewhere. You'll have to write:



              export void f2() ... 
              void f1() f2();





              share|improve this answer



























                5












                5








                5







                Modules are not yet in C++20. They may end up there, but they are not there yet.



                That said, while Modules does change many things about name lookup (the latest paper I'm aware of is P1103R1), Modules will not change the fundamental property of C++ that names must be declared before use (modulo things like dependent unqualified calls - which simply delays the lookup, but it still has to actually happen).



                This:




                void f1() f2(); 
                export void f2() ...



                will still be a compile error if there is no previous declaration of f2 or it wasn't imported from somewhere. You'll have to write:



                export void f2() ... 
                void f1() f2();





                share|improve this answer















                Modules are not yet in C++20. They may end up there, but they are not there yet.



                That said, while Modules does change many things about name lookup (the latest paper I'm aware of is P1103R1), Modules will not change the fundamental property of C++ that names must be declared before use (modulo things like dependent unqualified calls - which simply delays the lookup, but it still has to actually happen).



                This:




                void f1() f2(); 
                export void f2() ...



                will still be a compile error if there is no previous declaration of f2 or it wasn't imported from somewhere. You'll have to write:



                export void f2() ... 
                void f1() f2();






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 14 '18 at 21:14

























                answered Nov 14 '18 at 21:08









                BarryBarry

                183k20318583




                183k20318583





























                    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%2f53307773%2fc20-modules-ts-still-need-function-declaration%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







                    這個網誌中的熱門文章

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3

                    Museum of Modern and Contemporary Art of Trento and Rovereto