http://llvm.org/bugs/show_bug.cgi?id=6772

Chandler Carruth <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |[email protected]
         Resolution|                            |INVALID

--- Comment #1 from Chandler Carruth <[email protected]> 2010-04-04 04:15:34 
CDT ---
(In reply to comment #0)
> Script started on Sat Apr  3 16:29:45 2010
> $ cat ccd.cpp
> struct A {
>         A() {}
> };
> 
> class B {
>         A a_;
> };
> 
> int
> foo()
> {
>         const B b;
>         return 0;
> }
> $ g++ --version
> g++ (GCC) 4.2.1 20070719  [FreeBSD]
> Copyright (C) 2007 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> $ g++ -c ccd.cpp
> $ clang++ --version
> clang version 1.5 (trunk)
> Target: i386-portbld-freebsd9.0
> Thread model: posix
> $ clang++ -c ccd.cpp
> ccd.cpp:12:10: error: default initialization of an object of const type 'B
> const' requires a user-provided default constructor

Clang is correct: C++'03 [dcl.init] p9: If no initializer is specified for an
object, and the object is of (possibly cv-qualified) non-POD class type (or
array thereof), the object shall be default-initialized; if the object is of
const-qualified type, the underlying class type shall have a user-declared
default constructor.

The user declared default constructor for A makes A non-POD. The A member in B
makes B non-POD, and thus this rule kicks in, and the code provided is invalid.

You could re-open as a request for a GCC-compatibility setting to allow such
code, but I don't personally see a lot of value in it. Perhaps others do, so
feel free to re-open if you want to pursue that path.

>         const B b;
>                 ^
> 1 diagnostic generated.
> $ ^D
> Script done on Sat Apr  3 16:30:29 2010

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to