Is the address of a local variable a constexpr? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experience Should we burninate the [wrap] tag?What are the differences between a pointer variable and a reference variable in C++?When should you use constexpr capability in C++11?Undefined reference to static constexpr char[]const vs constexpr on variablesDoes static constexpr variable make sense?Difference between `constexpr` and `const`Unique address for constexpr variableenum vs constexpr for actual static constants inside classesConstexpr placement new?constexpr unique id, compiles with clang but not with gcc

The logistics of corpse disposal

Why did the IBM 650 use bi-quinary?

Can Pao de Queijo, and similar foods, be kosher for Passover?

Is high blood pressure ever a symptom attributable solely to dehydration?

Should I discuss the type of campaign with my players?

What are the motives behind Cersei's orders given to Bronn?

How does cp -a work

Why don't the Weasley twins use magic outside of school if the Trace can only find the location of spells cast?

Should I call the interviewer directly, if HR aren't responding?

If 'B is more likely given A', then 'A is more likely given B'

Check which numbers satisfy the condition [A*B*C = A! + B! + C!]

Storing hydrofluoric acid before the invention of plastics

Should gear shift center itself while in neutral?

Why was the term "discrete" used in discrete logarithm?

Is it true that "carbohydrates are of no use for the basal metabolic need"?

I am not a queen, who am I?

What would be the ideal power source for a cybernetic eye?

What's the purpose of writing one's academic bio in 3rd person?

Withdrew £2800, but only £2000 shows as withdrawn on online banking; what are my obligations?

How widely used is the term Treppenwitz? Is it something that most Germans know?

What do you call a plan that's an alternative plan in case your initial plan fails?

How to recreate this effect in Photoshop?

List *all* the tuples!

How to bypass password on Windows XP account?



Is the address of a local variable a constexpr?



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
The Ask Question Wizard is Live!
Data science time! April 2019 and salary with experience
Should we burninate the [wrap] tag?What are the differences between a pointer variable and a reference variable in C++?When should you use constexpr capability in C++11?Undefined reference to static constexpr char[]const vs constexpr on variablesDoes static constexpr variable make sense?Difference between `constexpr` and `const`Unique address for constexpr variableenum vs constexpr for actual static constants inside classesConstexpr placement new?constexpr unique id, compiles with clang but not with gcc



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








8















In Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 (Section 10.4.5 Address Constant Expressions), he uses a code example where the address of a local variable is set to a constexpr variable. I thought this looked odd, so I tried running the example with g++ version 7.3.0 and was unable to get the same results. Here is his code example verbatim (although slightly abridged):



extern char glob;

void f(char loc)
constexpr const char* p0 = &glob; // OK: &glob's is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



When I run this, I get:



error: ‘(const char*)(& loc)’ is not a constant expression


Is something happening with g++ that I'm not aware of, or is there something more to Bjarne's example?










share|improve this question



















  • 2





    Clearly, &loc can't be a constexpr. However, these lines of code don't appear on my kindle version. He does show a constexpr for the address of a "C" style string in a local function. That's legal since these are in global space while loc is an argument on the stack and not constant. Is that example what you are referring to?

    – doug
    1 hour ago












  • @doug check section 10.4.5 Address Constant Expressions. I'll update the question to make this more clear. Also, my example is abridged

    – johnnyodonnell
    1 hour ago






  • 2





    char loc is a locally declared character that is not static. The next time f() is called there is no guarantee loc will have the same address. 10.4.5 makes that distinction between an address assigned by the linker and those assigned by the compiler. 2013 Stroustrup - The C++ Programming Language 4th Edition.pdf

    – David C. Rankin
    1 hour ago







  • 1





    @DavidC.Rankin it looks like your version (a pdf) is different from mine (a hard-copy). This must have been a mistake and was updated by the time your pdf was created.

    – johnnyodonnell
    54 mins ago






  • 2





    Yes, I was kinda scratching my head as to where &glob came from, but &loc was identifiable.

    – David C. Rankin
    51 mins ago

















8















In Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 (Section 10.4.5 Address Constant Expressions), he uses a code example where the address of a local variable is set to a constexpr variable. I thought this looked odd, so I tried running the example with g++ version 7.3.0 and was unable to get the same results. Here is his code example verbatim (although slightly abridged):



extern char glob;

void f(char loc)
constexpr const char* p0 = &glob; // OK: &glob's is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



When I run this, I get:



error: ‘(const char*)(& loc)’ is not a constant expression


Is something happening with g++ that I'm not aware of, or is there something more to Bjarne's example?










share|improve this question



















  • 2





    Clearly, &loc can't be a constexpr. However, these lines of code don't appear on my kindle version. He does show a constexpr for the address of a "C" style string in a local function. That's legal since these are in global space while loc is an argument on the stack and not constant. Is that example what you are referring to?

    – doug
    1 hour ago












  • @doug check section 10.4.5 Address Constant Expressions. I'll update the question to make this more clear. Also, my example is abridged

    – johnnyodonnell
    1 hour ago






  • 2





    char loc is a locally declared character that is not static. The next time f() is called there is no guarantee loc will have the same address. 10.4.5 makes that distinction between an address assigned by the linker and those assigned by the compiler. 2013 Stroustrup - The C++ Programming Language 4th Edition.pdf

    – David C. Rankin
    1 hour ago







  • 1





    @DavidC.Rankin it looks like your version (a pdf) is different from mine (a hard-copy). This must have been a mistake and was updated by the time your pdf was created.

    – johnnyodonnell
    54 mins ago






  • 2





    Yes, I was kinda scratching my head as to where &glob came from, but &loc was identifiable.

    – David C. Rankin
    51 mins ago













8












8








8


1






In Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 (Section 10.4.5 Address Constant Expressions), he uses a code example where the address of a local variable is set to a constexpr variable. I thought this looked odd, so I tried running the example with g++ version 7.3.0 and was unable to get the same results. Here is his code example verbatim (although slightly abridged):



extern char glob;

void f(char loc)
constexpr const char* p0 = &glob; // OK: &glob's is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



When I run this, I get:



error: ‘(const char*)(& loc)’ is not a constant expression


Is something happening with g++ that I'm not aware of, or is there something more to Bjarne's example?










share|improve this question
















In Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 (Section 10.4.5 Address Constant Expressions), he uses a code example where the address of a local variable is set to a constexpr variable. I thought this looked odd, so I tried running the example with g++ version 7.3.0 and was unable to get the same results. Here is his code example verbatim (although slightly abridged):



extern char glob;

void f(char loc)
constexpr const char* p0 = &glob; // OK: &glob's is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



When I run this, I get:



error: ‘(const char*)(& loc)’ is not a constant expression


Is something happening with g++ that I'm not aware of, or is there something more to Bjarne's example?







c++ c++11 constexpr memory-address






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 48 mins ago







johnnyodonnell

















asked 1 hour ago









johnnyodonnelljohnnyodonnell

378114




378114







  • 2





    Clearly, &loc can't be a constexpr. However, these lines of code don't appear on my kindle version. He does show a constexpr for the address of a "C" style string in a local function. That's legal since these are in global space while loc is an argument on the stack and not constant. Is that example what you are referring to?

    – doug
    1 hour ago












  • @doug check section 10.4.5 Address Constant Expressions. I'll update the question to make this more clear. Also, my example is abridged

    – johnnyodonnell
    1 hour ago






  • 2





    char loc is a locally declared character that is not static. The next time f() is called there is no guarantee loc will have the same address. 10.4.5 makes that distinction between an address assigned by the linker and those assigned by the compiler. 2013 Stroustrup - The C++ Programming Language 4th Edition.pdf

    – David C. Rankin
    1 hour ago







  • 1





    @DavidC.Rankin it looks like your version (a pdf) is different from mine (a hard-copy). This must have been a mistake and was updated by the time your pdf was created.

    – johnnyodonnell
    54 mins ago






  • 2





    Yes, I was kinda scratching my head as to where &glob came from, but &loc was identifiable.

    – David C. Rankin
    51 mins ago












  • 2





    Clearly, &loc can't be a constexpr. However, these lines of code don't appear on my kindle version. He does show a constexpr for the address of a "C" style string in a local function. That's legal since these are in global space while loc is an argument on the stack and not constant. Is that example what you are referring to?

    – doug
    1 hour ago












  • @doug check section 10.4.5 Address Constant Expressions. I'll update the question to make this more clear. Also, my example is abridged

    – johnnyodonnell
    1 hour ago






  • 2





    char loc is a locally declared character that is not static. The next time f() is called there is no guarantee loc will have the same address. 10.4.5 makes that distinction between an address assigned by the linker and those assigned by the compiler. 2013 Stroustrup - The C++ Programming Language 4th Edition.pdf

    – David C. Rankin
    1 hour ago







  • 1





    @DavidC.Rankin it looks like your version (a pdf) is different from mine (a hard-copy). This must have been a mistake and was updated by the time your pdf was created.

    – johnnyodonnell
    54 mins ago






  • 2





    Yes, I was kinda scratching my head as to where &glob came from, but &loc was identifiable.

    – David C. Rankin
    51 mins ago







2




2





Clearly, &loc can't be a constexpr. However, these lines of code don't appear on my kindle version. He does show a constexpr for the address of a "C" style string in a local function. That's legal since these are in global space while loc is an argument on the stack and not constant. Is that example what you are referring to?

– doug
1 hour ago






Clearly, &loc can't be a constexpr. However, these lines of code don't appear on my kindle version. He does show a constexpr for the address of a "C" style string in a local function. That's legal since these are in global space while loc is an argument on the stack and not constant. Is that example what you are referring to?

– doug
1 hour ago














@doug check section 10.4.5 Address Constant Expressions. I'll update the question to make this more clear. Also, my example is abridged

– johnnyodonnell
1 hour ago





@doug check section 10.4.5 Address Constant Expressions. I'll update the question to make this more clear. Also, my example is abridged

– johnnyodonnell
1 hour ago




2




2





char loc is a locally declared character that is not static. The next time f() is called there is no guarantee loc will have the same address. 10.4.5 makes that distinction between an address assigned by the linker and those assigned by the compiler. 2013 Stroustrup - The C++ Programming Language 4th Edition.pdf

– David C. Rankin
1 hour ago






char loc is a locally declared character that is not static. The next time f() is called there is no guarantee loc will have the same address. 10.4.5 makes that distinction between an address assigned by the linker and those assigned by the compiler. 2013 Stroustrup - The C++ Programming Language 4th Edition.pdf

– David C. Rankin
1 hour ago





1




1





@DavidC.Rankin it looks like your version (a pdf) is different from mine (a hard-copy). This must have been a mistake and was updated by the time your pdf was created.

– johnnyodonnell
54 mins ago





@DavidC.Rankin it looks like your version (a pdf) is different from mine (a hard-copy). This must have been a mistake and was updated by the time your pdf was created.

– johnnyodonnell
54 mins ago




2




2





Yes, I was kinda scratching my head as to where &glob came from, but &loc was identifiable.

– David C. Rankin
51 mins ago





Yes, I was kinda scratching my head as to where &glob came from, but &loc was identifiable.

– David C. Rankin
51 mins ago












3 Answers
3






active

oldest

votes


















6














Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 refers to the following code:



constexpr const char* p1="asdf";


This is OK because "asdf" is stored in a fixed memory location.



void f(char loc) 
constexpr const char* p0 = &glob; // OK: &glob's is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



However, loc is not in a fixed memory location. it's on the stack and will have varying locations depending on when it is called.






share|improve this answer























  • So, you're saying that Bjarne should not have said that &loc will be "OK", right?

    – johnnyodonnell
    57 mins ago












  • The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

    – johnnyodonnell
    52 mins ago











  • Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

    – jackw11111
    51 mins ago











  • @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

    – johnnyodonnell
    50 mins ago


















2














It appears that the example from section 10.4.5 provided in my hard-copy of the "The C++ Programming Language (4th Edition)" is incorrect. And so I've concluded that the address of a local variable is not a constexpr.



The example appears to have been updated in some pdf versions as seen here:



enter image description here






share|improve this answer






























    1














    Just to add to other answers that have pointed out the mistake, C++ standard only allows constexpr pointers to objects of static-storage duration, one past the end of such, or nullptr. See [expr.const/8] specifically #8.2;



    It's worth noting that:




    • string-literals have static-storage duration:

    • Based on constraints in declaring extern variables, they'll inherently have static-storage duration or thread local-storage duration.

    Hence this is valid:



    #include <string>

    extern char glob;
    std::string boom = "Haha";

    void f(char loc)
    constexpr const char* p1 = &glob;
    constexpr std::string* p2 = nullptr;
    constexpr std::string* p3 = &boom;






    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%2f55698844%2fis-the-address-of-a-local-variable-a-constexpr%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      6














      Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 refers to the following code:



      constexpr const char* p1="asdf";


      This is OK because "asdf" is stored in a fixed memory location.



      void f(char loc) 
      constexpr const char* p0 = &glob; // OK: &glob's is a constant
      constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



      However, loc is not in a fixed memory location. it's on the stack and will have varying locations depending on when it is called.






      share|improve this answer























      • So, you're saying that Bjarne should not have said that &loc will be "OK", right?

        – johnnyodonnell
        57 mins ago












      • The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

        – johnnyodonnell
        52 mins ago











      • Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

        – jackw11111
        51 mins ago











      • @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

        – johnnyodonnell
        50 mins ago















      6














      Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 refers to the following code:



      constexpr const char* p1="asdf";


      This is OK because "asdf" is stored in a fixed memory location.



      void f(char loc) 
      constexpr const char* p0 = &glob; // OK: &glob's is a constant
      constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



      However, loc is not in a fixed memory location. it's on the stack and will have varying locations depending on when it is called.






      share|improve this answer























      • So, you're saying that Bjarne should not have said that &loc will be "OK", right?

        – johnnyodonnell
        57 mins ago












      • The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

        – johnnyodonnell
        52 mins ago











      • Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

        – jackw11111
        51 mins ago











      • @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

        – johnnyodonnell
        50 mins ago













      6












      6








      6







      Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 refers to the following code:



      constexpr const char* p1="asdf";


      This is OK because "asdf" is stored in a fixed memory location.



      void f(char loc) 
      constexpr const char* p0 = &glob; // OK: &glob's is a constant
      constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



      However, loc is not in a fixed memory location. it's on the stack and will have varying locations depending on when it is called.






      share|improve this answer













      Bjarne Stroustrup's book "The C++ Programming Language (4th Edition)" on p. 267 refers to the following code:



      constexpr const char* p1="asdf";


      This is OK because "asdf" is stored in a fixed memory location.



      void f(char loc) 
      constexpr const char* p0 = &glob; // OK: &glob's is a constant
      constexpr const char* p2 = &loc; // OK: &loc is constant in its scope



      However, loc is not in a fixed memory location. it's on the stack and will have varying locations depending on when it is called.







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered 59 mins ago









      dougdoug

      8621410




      8621410












      • So, you're saying that Bjarne should not have said that &loc will be "OK", right?

        – johnnyodonnell
        57 mins ago












      • The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

        – johnnyodonnell
        52 mins ago











      • Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

        – jackw11111
        51 mins ago











      • @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

        – johnnyodonnell
        50 mins ago

















      • So, you're saying that Bjarne should not have said that &loc will be "OK", right?

        – johnnyodonnell
        57 mins ago












      • The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

        – johnnyodonnell
        52 mins ago











      • Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

        – jackw11111
        51 mins ago











      • @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

        – johnnyodonnell
        50 mins ago
















      So, you're saying that Bjarne should not have said that &loc will be "OK", right?

      – johnnyodonnell
      57 mins ago






      So, you're saying that Bjarne should not have said that &loc will be "OK", right?

      – johnnyodonnell
      57 mins ago














      The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

      – johnnyodonnell
      52 mins ago





      The example code I used in the question is taken verbatim. After looking at @doug's pdf, I think the hard-copy book that I own is incorrect. I think this mistake was updated in later versions.

      – johnnyodonnell
      52 mins ago













      Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

      – jackw11111
      51 mins ago





      Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…

      – jackw11111
      51 mins ago













      @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

      – johnnyodonnell
      50 mins ago





      @jackw11111 my version is different from the pdf provided in that link. doug provided a link to the same pdf. My hard-copy and that pdf show different examples for section 10.4.5

      – johnnyodonnell
      50 mins ago













      2














      It appears that the example from section 10.4.5 provided in my hard-copy of the "The C++ Programming Language (4th Edition)" is incorrect. And so I've concluded that the address of a local variable is not a constexpr.



      The example appears to have been updated in some pdf versions as seen here:



      enter image description here






      share|improve this answer



























        2














        It appears that the example from section 10.4.5 provided in my hard-copy of the "The C++ Programming Language (4th Edition)" is incorrect. And so I've concluded that the address of a local variable is not a constexpr.



        The example appears to have been updated in some pdf versions as seen here:



        enter image description here






        share|improve this answer

























          2












          2








          2







          It appears that the example from section 10.4.5 provided in my hard-copy of the "The C++ Programming Language (4th Edition)" is incorrect. And so I've concluded that the address of a local variable is not a constexpr.



          The example appears to have been updated in some pdf versions as seen here:



          enter image description here






          share|improve this answer













          It appears that the example from section 10.4.5 provided in my hard-copy of the "The C++ Programming Language (4th Edition)" is incorrect. And so I've concluded that the address of a local variable is not a constexpr.



          The example appears to have been updated in some pdf versions as seen here:



          enter image description here







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 44 mins ago









          johnnyodonnelljohnnyodonnell

          378114




          378114





















              1














              Just to add to other answers that have pointed out the mistake, C++ standard only allows constexpr pointers to objects of static-storage duration, one past the end of such, or nullptr. See [expr.const/8] specifically #8.2;



              It's worth noting that:




              • string-literals have static-storage duration:

              • Based on constraints in declaring extern variables, they'll inherently have static-storage duration or thread local-storage duration.

              Hence this is valid:



              #include <string>

              extern char glob;
              std::string boom = "Haha";

              void f(char loc)
              constexpr const char* p1 = &glob;
              constexpr std::string* p2 = nullptr;
              constexpr std::string* p3 = &boom;






              share|improve this answer



























                1














                Just to add to other answers that have pointed out the mistake, C++ standard only allows constexpr pointers to objects of static-storage duration, one past the end of such, or nullptr. See [expr.const/8] specifically #8.2;



                It's worth noting that:




                • string-literals have static-storage duration:

                • Based on constraints in declaring extern variables, they'll inherently have static-storage duration or thread local-storage duration.

                Hence this is valid:



                #include <string>

                extern char glob;
                std::string boom = "Haha";

                void f(char loc)
                constexpr const char* p1 = &glob;
                constexpr std::string* p2 = nullptr;
                constexpr std::string* p3 = &boom;






                share|improve this answer

























                  1












                  1








                  1







                  Just to add to other answers that have pointed out the mistake, C++ standard only allows constexpr pointers to objects of static-storage duration, one past the end of such, or nullptr. See [expr.const/8] specifically #8.2;



                  It's worth noting that:




                  • string-literals have static-storage duration:

                  • Based on constraints in declaring extern variables, they'll inherently have static-storage duration or thread local-storage duration.

                  Hence this is valid:



                  #include <string>

                  extern char glob;
                  std::string boom = "Haha";

                  void f(char loc)
                  constexpr const char* p1 = &glob;
                  constexpr std::string* p2 = nullptr;
                  constexpr std::string* p3 = &boom;






                  share|improve this answer













                  Just to add to other answers that have pointed out the mistake, C++ standard only allows constexpr pointers to objects of static-storage duration, one past the end of such, or nullptr. See [expr.const/8] specifically #8.2;



                  It's worth noting that:




                  • string-literals have static-storage duration:

                  • Based on constraints in declaring extern variables, they'll inherently have static-storage duration or thread local-storage duration.

                  Hence this is valid:



                  #include <string>

                  extern char glob;
                  std::string boom = "Haha";

                  void f(char loc)
                  constexpr const char* p1 = &glob;
                  constexpr std::string* p2 = nullptr;
                  constexpr std::string* p3 = &boom;







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 28 mins ago









                  WhiZTiMWhiZTiM

                  18.1k33153




                  18.1k33153



























                      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%2f55698844%2fis-the-address-of-a-local-variable-a-constexpr%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

                      منجزی محتویات تیره‌های طایفه منجزی[ویرایش] مشاهیر طایفه منجزی[ویرایش] محل سکونت[ویرایش] پانویس[ویرایش] منابع[ویرایش] منوی ناوبری«نمودار اجتماعی طوایف بختیاری»«BakhtyārBAḴTĪĀRĪ TRIBE»«اسامی طوایف و شعب ایل بختیاری»ووگسترش آن

                      What does the writing on Poe's helmet say? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Favorite questions and answers from first quarter of 2019 Latest Blog Post: Avengers: Endgame PredictionsWhat is the purpose of the blast shield helmet?Why was the Stormtrooper helmet designed this way?What does Kylo Ren place his helmet on?What does the writing on Poe Dameron's flight vest say?Is this Poe Damerons dad? (Kes Dameron)Is Poe Dameron Force-Sensitive?Why is Poe Dameron so shocked in the First Order star destroyer hangar?What does the code breaker's hat say?In “The Last Jedi” was it actually Poe's fault that so much of the resistance died?Did Poe Dameron make custom modifications to his black X-Wing?

                      How to implement Time Range Picker in Magento 2 Admin system.xml? The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Date field system.xmlMagento 2 - time picker on backend (xml form)How to overwrite System.xml?Magento 2 Pattern Library — Date & Time SelectorsHTTP 500 Error in System ConfigurationMagento 2 - time picker on backend (xml form)Magento 2 Add Datetime picker in system.xmlDate Time picker and time zone woesHow to implement Single Date and Time Picker in Magento 2Custom Module for Custom Column using Plugin Yes/No optionMagento 2 DateTime picker - Limit time selection rangeMagento2 UI Component admin Grid / Listing stuck loading