Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 187033
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T15:45:07+00:00 2026-05-11T15:45:07+00:00

Consider this code (using CString because it’s familiar and easy to see when not

  • 0

Consider this code (using CString because it’s familiar and easy to see when not constructed, but nothing special about the class), tested under Visual Studio 2008:

CString DoSomething( const CString& sString ) {     return sString; }  CString sTest1 = DoSomething( sTest1 ); // Compiles (no warnings), fails at runtime CString sTest2( DoSomething( sTest2 ) ); // Doesn't compile CString sTest3; sTest3 = DoSomething( sTest3 ); // Compiles, self-assignment, works 

As I understand the C++ standard, Test1 can be compiled into Test2 automatically as a compile-time optimization, provided the appropriate constructor is available (which, by default, will be generated to be identical to the first test). Notably, however, the behavior is not the same as Test3, which will work correctly.

Now I understand why Test1 does not work, and why Test2 does not compile. What I am curious about is why Test1 compiles in the first place? Is this permitted in the standard, open for interpretation, a flaw in VS2008’s compiler, a deficiency in init-before-use static checking, or what? Is there any way to force the compiler to at least give a warning in this case (Test1 appears to compile clean with max warning level under VS2008)? What would be the justification for the C++ specification permitting this construct?

Edit: Alternatively, is there any way to force the compiler to compile Test1 as Test2 (and thus trigger the error)?

Edit to add verbatim error message for Test2: error C2065: ‘sTest2’ : undeclared identifier

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T15:45:08+00:00Added an answer on May 11, 2026 at 3:45 pm

    The behavior you are seeing in sTest1 is undefined in the C++ standard. It’s weird and wrong but it compiles on a few compilers.

    See litb’s answer on the following thread for more details: method running on an object BEFORE the object has been initialised?

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 192k
  • Answers 192k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer "ff0000".scan(/../).map { |match| match.hex } #=> [255, 0, 0] or… May 12, 2026 at 6:24 pm
  • Editorial Team
    Editorial Team added an answer Ittai, If I were a lazy man (and I am)… May 12, 2026 at 6:24 pm
  • Editorial Team
    Editorial Team added an answer I've also searched for this, but I don't think it's… May 12, 2026 at 6:24 pm

Related Questions

Consider this code (using CString because it's familiar and easy to see when not
Consider this code... using System.Threading; //... Timer someWork = new Timer( delegate(object state) {
Yet another argument with a friend of mine. Consider this code: class User <
This is a question for a WSS/SharePoint guru. Consider this scenario: I have an
Can someone give an example of a good time to actually use unsafe and

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.