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
How to motivate offshore teams and trust them to deliver?
How discoverable are IPv6 addresses and AAAA names by potential attackers?
Gastric acid as a weapon
Check which numbers satisfy the condition [A*B*C = A! + B! + C!]
Disable hyphenation for an entire paragraph
If Jon Snow became King of the Seven Kingdoms what would his regnal number be?
Why is black pepper both grey and black?
List *all* the tuples!
Should I discuss the type of campaign with my players?
I am not a queen, who am I?
Does surprise arrest existing movement?
Stars Make Stars
How does cp -a work
What is this single-engine low-wing propeller plane?
G-Code for resetting to 100% speed
Can inflation occur in a positive-sum game currency system such as the Stack Exchange reputation system?
Is a manifold-with-boundary with given interior and non-empty boundary essentially unique?
Storing hydrofluoric acid before the invention of plastics
Is the Standard Deduction better than Itemized when both are the same amount?
Output the ŋarâþ crîþ alphabet song without using (m)any letters
What is the longest distance a 13th-level monk can jump while attacking on the same turn?
How do I determine if the rules for a long jump or high jump are applicable for Monks?
How can I make names more distinctive without making them longer?
If a contract sometimes uses the wrong name, is it still valid?
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;
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
|
show 3 more comments
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
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
2
char loc
is a locally declared character that is not static. The next timef()
is called there is no guaranteeloc
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
1 hour ago
2
Yes, I was kinda scratching my head as to where&glob
came from, but&loc
was identifiable.
– David C. Rankin
1 hour ago
1
@DavidC.Rankin Good point, I should show that in my question. But yeah, I think this is because our versions are different
– johnnyodonnell
1 hour ago
|
show 3 more comments
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
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
c++ c++11 constexpr memory-address
edited 1 hour ago
johnnyodonnell
asked 1 hour ago
johnnyodonnelljohnnyodonnell
393114
393114
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
2
char loc
is a locally declared character that is not static. The next timef()
is called there is no guaranteeloc
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
1 hour ago
2
Yes, I was kinda scratching my head as to where&glob
came from, but&loc
was identifiable.
– David C. Rankin
1 hour ago
1
@DavidC.Rankin Good point, I should show that in my question. But yeah, I think this is because our versions are different
– johnnyodonnell
1 hour ago
|
show 3 more comments
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
2
char loc
is a locally declared character that is not static. The next timef()
is called there is no guaranteeloc
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
1 hour ago
2
Yes, I was kinda scratching my head as to where&glob
came from, but&loc
was identifiable.
– David C. Rankin
1 hour ago
1
@DavidC.Rankin Good point, I should show that in my question. But yeah, I think this is because our versions are different
– johnnyodonnell
1 hour 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
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
1 hour 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
1 hour ago
2
2
Yes, I was kinda scratching my head as to where
&glob
came from, but &loc
was identifiable.– David C. Rankin
1 hour ago
Yes, I was kinda scratching my head as to where
&glob
came from, but &loc
was identifiable.– David C. Rankin
1 hour ago
1
1
@DavidC.Rankin Good point, I should show that in my question. But yeah, I think this is because our versions are different
– johnnyodonnell
1 hour ago
@DavidC.Rankin Good point, I should show that in my question. But yeah, I think this is because our versions are different
– johnnyodonnell
1 hour ago
|
show 3 more comments
3 Answers
3
active
oldest
votes
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.
So, you're saying that Bjarne should not have said that&loc
will be "OK", right?
– johnnyodonnell
1 hour 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
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour 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
1 hour ago
add a comment |
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:
add a comment |
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;
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/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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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%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
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.
So, you're saying that Bjarne should not have said that&loc
will be "OK", right?
– johnnyodonnell
1 hour 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
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour 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
1 hour ago
add a comment |
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.
So, you're saying that Bjarne should not have said that&loc
will be "OK", right?
– johnnyodonnell
1 hour 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
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour 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
1 hour ago
add a comment |
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.
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.
answered 1 hour ago
dougdoug
8621410
8621410
So, you're saying that Bjarne should not have said that&loc
will be "OK", right?
– johnnyodonnell
1 hour 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
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour 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
1 hour ago
add a comment |
So, you're saying that Bjarne should not have said that&loc
will be "OK", right?
– johnnyodonnell
1 hour 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
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour 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
1 hour ago
So, you're saying that Bjarne should not have said that
&loc
will be "OK", right?– johnnyodonnell
1 hour ago
So, you're saying that Bjarne should not have said that
&loc
will be "OK", right?– johnnyodonnell
1 hour 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
1 hour 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
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour ago
Is it the same as this? github.com/boydfd/books/blob/master/seeing/stalled/…
– jackw11111
1 hour 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
1 hour 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
1 hour ago
add a comment |
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:
add a comment |
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:
add a comment |
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:
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:
answered 1 hour ago
johnnyodonnelljohnnyodonnell
393114
393114
add a comment |
add a comment |
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;
add a comment |
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;
add a comment |
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;
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;
answered 51 mins ago
WhiZTiMWhiZTiM
18.1k33153
18.1k33153
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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%2f55698844%2fis-the-address-of-a-local-variable-a-constexpr%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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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
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
2
char loc
is a locally declared character that is not static. The next timef()
is called there is no guaranteeloc
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
1 hour ago
2
Yes, I was kinda scratching my head as to where
&glob
came from, but&loc
was identifiable.– David C. Rankin
1 hour ago
1
@DavidC.Rankin Good point, I should show that in my question. But yeah, I think this is because our versions are different
– johnnyodonnell
1 hour ago