aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wliteral-suffix.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wunused-parm.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C162
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-2.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/__func__.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access01.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access02.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-19.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-23.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-24.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-25.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-26.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-27.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-28.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-29.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-30.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-31.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33a.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-36.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-37.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-38.C41
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-40.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286a.C60
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286b.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-enum-1.C47
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof3.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof4.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto10.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto11.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto14.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto15.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto16.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto17.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto18.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto19.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto2.C73
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto20.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto21.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto22.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto23.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto24.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto25.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto26.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto27.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto28.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto29.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto3.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto30.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto31.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto32.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto33.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto34.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto35.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto36.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto37.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto38.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto39.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto4.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto40.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto41.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto5.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto7.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto9.C123
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new1.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new2.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bind.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket1.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket2.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket3.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket4.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast-bug.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/catch1.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse-bug.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C50
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-3.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55432.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55708.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-56302.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-access.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-and.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr3.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr4.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr5.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr6.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-tparm.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C63
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute2.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-auto.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base4.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin2.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cleanup.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-complex.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor13.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor4.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor5.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor6.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor7.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor8.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor9.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data1.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg2.C44
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default1.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delete.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-deref.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag2.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C48
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-eh-spec.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty3.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty4.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty5.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty6.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C93
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-fnptr.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend-2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function2.C49
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function3.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice11.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice12.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice13.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice14.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice3.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice7.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice8.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist.C64
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist2.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist7.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-invisiref1.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-main.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C69
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg2.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept3.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept4.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept7.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonstatic.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object2.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pedantic.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pos1.C60
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-potential1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C44
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-sassert.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-specialization.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static10.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static3.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static4.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static5.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static6.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-stmtexpr.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch2.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-synth1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-targ.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-throw.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C106
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typeid.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value4.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-variadic.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual3.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc1.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc2.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C62
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc4.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc5.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc6.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc7.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc8.C66
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33837.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33838.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-38655.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C132
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-refbug.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype1.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype10.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype11.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype12.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype13.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype14.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype15.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype16.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype17.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype18.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype19.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype2.C58
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype20.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype21.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype22.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype23.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype24.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype25.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype26.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype27.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype28.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype29.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype3.C71
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype30.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype31.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype32.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype33.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype34.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype35.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype36.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype37.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype38.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype39.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype4.C82
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype40.C101
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype41.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype42.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype43.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype44.C44
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype45.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype46.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype47.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype48.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype49.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype5.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype50.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype51.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype52.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype53.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype54.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype55.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype56.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype57.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype6.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype7.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype8.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype9.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deduce.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted1.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted10.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted11.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted13.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted14.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted15.C58
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted16.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted17.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted18.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19a.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted2.C69
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted20.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted21.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted22.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted23.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted24.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted25.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted26.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted27.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted28.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted29.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted3.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted30.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted31.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted32.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted33.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted34.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted35.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted36.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted37.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted38.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted39.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted4.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted40.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted41.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted42.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted43.C60
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted44.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted45.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted46.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted47.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted48.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted5.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted6.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted7.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted8.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted9.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted1.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted2.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted3.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dependent1.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/diag1.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision.C75
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision2.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_neg.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_weak.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum10.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum11.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum12.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum13.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum14.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum15.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum16.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum17.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum18.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum19.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum2.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum20.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21a.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21b.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum22.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum23.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum24.C57
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum25.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum26.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum27.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum28.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum3.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum4.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum5.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum6.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum7.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum8.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum9.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base2.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error2.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error3.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error4.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C107
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error6.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error7.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error8.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit1.C58
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit2.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit3.C50
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit5.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit6.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit7.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-2.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-3.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg3.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg5.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum1.C44
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum10.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum11.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum2.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum3.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum4.C44
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum5.C62
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum6.C73
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum7.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum9.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend1.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend2.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-1.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-10.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-11.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-12.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-13.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-14.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-15.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-16.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-18.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-19.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2-1.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-20.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-21.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-22.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-23.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-24.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-25.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-26.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-27.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-28.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-29.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-3.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-30.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-31.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-32.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-33.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-34.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-35.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36-1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-37.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-38.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39-1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-40.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-41.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-42.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-43.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-44.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-45.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-46.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47-1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-49.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-5.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-50.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-51.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-53.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-55.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-6.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-7.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-8.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-9.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fext-numeric-literals.C115
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fno-ext-numeric-literals.C115
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-trivial1.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit1.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit10.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit11.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit12.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit14.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit2.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit3.C55
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit4.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit5.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit6.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit7.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit8.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit9.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor1.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor10.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor12.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor15.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor16.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor17.C45
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor4.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor6.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor7.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor8.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor9.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-explicit-sfinae.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C63
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-opt.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-pure.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist1.C71
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist10.C53
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist11.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist12.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist13.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist14.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist15.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist16.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist17.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist18.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist19.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist2.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist20.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist21.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist22.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist23.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist24.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist25.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist26.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist27.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist28.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist29.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist3.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist30.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist31.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist32.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist33.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist34.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist35.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist36.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist37.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist38.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist39.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist4.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist40.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist41.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist42.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist43.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist44.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist45.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist46.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist47.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist48.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist49.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist5.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist50.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist51.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist52.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist53.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist54.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist55.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist56.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist57.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist58.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist59.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist6.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist61.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist62.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist63.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist64.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist65.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist66.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist67.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist68.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist69.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist7.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist70.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist71.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist72.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist73.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist74.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist75.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist76.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist77.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist78.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist79.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist8.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist80.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist9.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns2.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns3.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns4.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns5.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/iop.C41
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-anon1.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto2.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref-neg.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-neg.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv4.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv5.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default-neg.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-neg.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctors.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-debug.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype1.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg3.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-diag1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-field-names.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice10.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice12.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice8.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice9.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist3.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-intname.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-lookup-neg.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C104
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle2.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle4.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mixed.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C62
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-non-const.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nop.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ns-scope.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi2.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C47
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-pass.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-recursive.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref-default.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C55
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template10.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template11.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template12.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template2.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template7.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template8.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this10.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this11.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this12.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C49
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this3.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this5.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-type.C74
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-typedef.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic1.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic2.C57
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn3.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn4.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/linkage2.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/local-targ1.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/long_long.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/move1.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named.C41
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named_refs.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/new1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C84
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept02.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept03.C52
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept04.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept05.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept06.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept07.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept08.C56
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept09.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept10.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C53
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept12.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C78
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept14.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept15.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept16.C130
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept17.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept18.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept19.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept20.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept21.C87
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept22.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.h8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/not_special.C52
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list3.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template3.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template4.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template5.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template6.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template7.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template8.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union1.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union4.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi1.C52
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi2.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi3.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi4.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi5.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi6.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi7.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi8.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr01.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr02.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr03.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr04.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr05.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr06.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr07.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr08.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr09.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr10.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr11.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr12.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr13.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr14.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr15.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr16.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr17.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr18.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr19.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr20.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C54
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr22.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr23.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr24.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr25.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr26.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr27.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr28.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr29.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr30.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overflow1.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload.C707
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload2.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload3.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overloadn.C708
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C60
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override2.C53
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override3.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override4.C45
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse1.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse2.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31432.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31434.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31437.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31438.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31439.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31442.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31443.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31444.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31445.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31993.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32114.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32115.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32125.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32126.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32127.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32128.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32252.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32253.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32566.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33839.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33930.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33955.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33996.C52
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34054.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34056.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34057.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34058.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34060.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34061.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38646.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38795.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr39639.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C41
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr45908.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47416.C224
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47476.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr48522.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50025.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50491.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50901.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51150.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51216.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51225.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51226.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51313.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51420.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51463.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51547.C50
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51619.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51786.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52440.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52744.C83
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52841.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54318.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54323.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57101.C221
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57172.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57416.C45
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57981.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58072.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58080.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58510.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58563.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58674.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58707.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58871.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59111.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59641.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60047.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60215.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for1.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for10.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for11.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for12.C115
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for13.C102
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C94
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for15.C58
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for16.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for17.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for18.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for19.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for2.C40
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for20.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for21.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for22.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for23.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for24.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for25.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for26.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for27.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for28.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for3.C41
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for4.C115
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for5.C53
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for6.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for7.C116
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for8.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for9.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C30
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual14.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C75
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reference_collapsing.C174
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reinterpret_cast1.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast2.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-conv1.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func2.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-restrict.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-return.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-template1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-this.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv10.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1n.C168
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1p.C145
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2n.C544
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2p.C507
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3n.C951
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3p.C1070
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4n.C1072
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4p.C1448
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5n.C806
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5p.C1256
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6n.C372
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6p.C687
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7n.C111
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7p.C233
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv8p.C62
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv9p.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rvo.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum.C76
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum2.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_98.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_examples.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae10.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae11.C57
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae12.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae13.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae14.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae15.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae16.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae17.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae18.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae19.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae2.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae20.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae21.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae22.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae23.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae24.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae25.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae26.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae27.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae28.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae29.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae3.C56
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae30.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae31.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae32.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae33.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae34.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae35.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae36.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae37.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae38.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae39.C146
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae4.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae40.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae41.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae42.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae43.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae44.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae45.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae46.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae47.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae48.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae49.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae5.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae6.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae7.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae8.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae9.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert1.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert10.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert11.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert2.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert3.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert4.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert5.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert6.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert7.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert8.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert9.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std-layout1.C91
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fext-numeric-literals.C115
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fno-ext-numeric-literals.C115
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stddef.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stdint.C135
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/syntax-err1.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-constructor-bug.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-va-arg-bug.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default1.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default3.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default4.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default5.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/template_deduction.C67
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing1.C118
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing2.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing3.C64
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing4.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing5.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing6.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing7.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing8.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing9.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/traits1.C133
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trivial1.C86
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-addr.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C41
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-friend.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-general.C51
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C63
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-inline.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow-neg.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C49
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.h22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-template.C50
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit_system_header6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union1.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union2.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union3.C68
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union4.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union5.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/unnamed_refs.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-104.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C475
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash1.C72
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-default.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-diag1.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C39
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-function.C95
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-init.C55
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-lambda.C79
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C49
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new2.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce2.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-rref.C36
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof1.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-throw.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ttp.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C293
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify-2.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic1.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic10.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic100.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic101.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic102.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic103.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic105.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic106.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic107.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic108.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic109.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic11.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic110.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic111.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic112.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic113.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic114.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic115.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic116.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic117.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic118.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic119.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic12.C42
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic120.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic121.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic122.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic123.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic124.C29
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic125.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic126.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic127.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic128.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic129.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic13.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic130.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic131.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic132.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic133.C46
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic134.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic135.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic139.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic14.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic140.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic141.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic142.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic143.C63
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic144.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic145.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic146.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic147.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic148.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic149.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic15.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic150.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic151.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic152.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic153.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic16.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic17.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic18.C47
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic19.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic2.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic20.C47
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic21.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic22.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic23.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic24.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic25.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic26.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic27.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic28.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic29.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic3.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic30.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic31.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic32.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic33.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic34.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic35.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic36.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic37.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic38.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic39.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic4.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic40.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic41.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic42.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic43.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic44.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic45.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic46.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic47.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic48.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic49.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic5.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic50.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic51.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic52.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic53.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic54.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic55.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic56.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic57.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic58.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic59.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic6.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic60.C1
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic61.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic62.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic63.C3
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic64.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic65.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic66.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic67.C24
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic68.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic69.C34
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic7.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic70.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic71.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic72.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic73.C32
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic74.C28
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic75.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic76.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic77.C21
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic78.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic79.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic8.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic80.C27
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic81.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic82.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic83.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic84.C25
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic85.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic86.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic87.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic88.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic89.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic9.C38
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic90.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic91.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic92.C70
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic93.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic94.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic95.C17
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic96.C26
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic97.C35
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic98.C410
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic99.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-33964.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34050.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051-2.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34052.C8
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34055.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34102.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34103.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219.C15
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34314.C50
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34399.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34606.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34751.C19
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34753.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34754.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34755.C6
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34919.C13
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34961.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35023.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35024.C11
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35026.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35147.C18
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35242.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35243.C9
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35331.C7
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-1.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C16
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-40092.C20
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-51314.C14
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55323.C12
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55542.C22
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C10
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C5
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C5
1507 files changed, 43025 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wliteral-suffix.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wliteral-suffix.C
new file mode 100644
index 0000000..b9b975b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wliteral-suffix.C
@@ -0,0 +1,28 @@
+// { dg-do run { target c++11 } }
+
+// Make sure -Wliteral-suffix is enabled by default and
+// triggers as expected.
+
+#define BAR "bar"
+#define PLUS_ONE + 1
+
+#include <cstdint>
+#include <cassert>
+
+
+void
+test()
+{
+ char c = '3'PLUS_ONE; // { dg-warning "invalid suffix on literal" }
+ char s[] = "foo"BAR; // { dg-warning "invalid suffix on literal" }
+
+ assert(c == '4');
+ assert(s[3] != '\0');
+ assert(s[3] == 'b');
+}
+
+int
+main()
+{
+ test();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wunused-parm.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wunused-parm.C
new file mode 100644
index 0000000..232e484
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wunused-parm.C
@@ -0,0 +1,24 @@
+// PR c++/57211
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-parameter" }
+
+template <class T> T&& move(T&);
+
+struct A
+{
+ struct B
+ {
+ B& operator=(B&&);
+ };
+
+ B f;
+
+ A& operator=(A&& p) = default;
+};
+
+int main()
+{
+ A a;
+ A b;
+ b = move(a);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C
new file mode 100644
index 0000000..a9dd155
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C
@@ -0,0 +1,162 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wzero-as-null-pointer-constant" }
+
+struct A;
+
+typedef int (A::*pointmemfun) (int);
+typedef int (A::*pointdmem);
+typedef int (*pointfun) (int);
+
+pointmemfun pmfs;
+pointdmem pdms;
+pointfun pfs;
+int* ps;
+
+void f()
+{
+ pointmemfun pmf(0); // { dg-warning "zero as null pointer" }
+ pointdmem pdm(0); // { dg-warning "zero as null pointer" }
+ pointfun pf(0); // { dg-warning "zero as null pointer" }
+ int* p(0); // { dg-warning "zero as null pointer" }
+
+ pointmemfun pmfn(nullptr);
+ pointdmem pdmn(nullptr);
+ pointfun pfn(nullptr);
+ int* pn(nullptr);
+
+ pmf = 0; // { dg-warning "zero as null pointer" }
+
+ pdm = 0; // { dg-warning "zero as null pointer" }
+
+ pf = 0; // { dg-warning "zero as null pointer" }
+
+ p = 0; // { dg-warning "zero as null pointer" }
+
+ pmf = nullptr;
+
+ pdm = nullptr;
+
+ pf = nullptr;
+
+ p = nullptr;
+
+ if (pmf)
+ ;
+
+ if (pdm)
+ ;
+
+ if (pf)
+ ;
+
+ if (p)
+ ;
+
+ if (!pmf)
+ ;
+
+ if (!pdm)
+ ;
+
+ if (!pf)
+ ;
+
+ if (!p)
+ ;
+
+ if (pmf == 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (pdm == 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (pf == 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (p == 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 == pmf) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 == pdm) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 == pf) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 == p) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (pmf != 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (pdm != 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (pf != 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (p != 0) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 != pmf) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 != pdm) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 != pf) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (0 != p) // { dg-warning "zero as null pointer" }
+ ;
+
+ if (pmf == nullptr)
+ ;
+
+ if (pdm == nullptr)
+ ;
+
+ if (pf == nullptr)
+ ;
+
+ if (p == nullptr)
+ ;
+
+ if (nullptr == pmf)
+ ;
+
+ if (nullptr == pdm)
+ ;
+
+ if (nullptr == pf)
+ ;
+
+ if (nullptr == p)
+ ;
+
+ if (pmf != nullptr)
+ ;
+
+ if (pdm != nullptr)
+ ;
+
+ if (pf != nullptr)
+ ;
+
+ if (p != nullptr)
+ ;
+
+ if (nullptr != pmf)
+ ;
+
+ if (nullptr != pdm)
+ ;
+
+ if (nullptr != pf)
+ ;
+
+ if (nullptr != p)
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-2.C
new file mode 100644
index 0000000..5cb4022
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-2.C
@@ -0,0 +1,15 @@
+// PR c++/56373
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wzero-as-null-pointer-constant" }
+
+struct shared_ptr
+{
+ shared_ptr(decltype(nullptr));
+};
+
+void f()
+{
+ shared_ptr a = 0; // { dg-warning "zero as null pointer" }
+ shared_ptr b(0); // { dg-warning "zero as null pointer" }
+ shared_ptr c{0}; // { dg-warning "zero as null pointer" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/__func__.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/__func__.C
new file mode 100644
index 0000000..7c2a712
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/__func__.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+const char* foo()
+{
+ return __func__;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access01.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access01.C
new file mode 100644
index 0000000..55c951f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access01.C
@@ -0,0 +1,15 @@
+// PR c++/49042
+// { dg-do compile { target c++11 } }
+
+template <class T>
+class A
+{
+ T p;
+public:
+ template <class U> auto f() -> decltype(+p) { }
+};
+
+int main()
+{
+ A<int>().f<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access02.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access02.C
new file mode 100644
index 0000000..74960a6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/access02.C
@@ -0,0 +1,39 @@
+// PR c++/58954
+// { dg-require-effective-target c++11 }
+
+template<class T>
+T&& declval();
+
+template<class T>
+struct foo_argument
+{
+ template<class Ret, class C, class Arg>
+ static Arg test(Ret (C::*)(Arg));
+
+ typedef decltype(test(&T::template foo<>)) type;
+};
+
+template<class T, class>
+struct dependent { typedef T type; };
+
+template<class T>
+struct base
+{
+ template<class Ignore = void>
+ auto foo(int i) -> decltype(declval<
+ typename dependent<T&, Ignore>::type
+ >().foo_impl(i));
+};
+
+struct derived : base<derived>
+{
+ friend struct base<derived>;
+private:
+ int foo_impl(int i);
+};
+
+int main()
+{
+ foo_argument<derived>::type var = 0;
+ return var;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C
new file mode 100644
index 0000000..bcefe3f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C
@@ -0,0 +1,36 @@
+// { dg-do compile { target c++11 } }
+
+template<template<class> class TT> struct X { };
+template<class> struct Y { };
+template<class T> using Z = Y<T>;
+
+void f(X<Y>);
+void g(X<Z>);
+
+void
+foo()
+{
+ // Below x and y have the same type (DR 1286)
+ X<Y> y;
+ X<Z> z;
+
+ // ... So these must compile.
+ f(z); // { dg-bogus "" }
+ g(y); // { dg-bogus "" }
+}
+
+template<class> struct A0 {};
+template<class T> using AA0 = A0<T>;
+template<class T> using AAA0 = AA0<T>;
+
+void f0(A0<int>);
+void
+g0()
+{
+ AA0<int> a;
+ AAA0<int> b;
+ f0(a);
+ f0(b);
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C
new file mode 100644
index 0000000..c52ab46
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+// These also represent tests for printing alias declarations and
+// their instantiations.
+
+template<class T, class U> struct A0 {};
+template<class T, class U> using AA0 = A0<T, U>;
+template<class T> struct AA0<int, T> {}; // { dg-error "specialization" }
+
+template <class U> using Ptr = U*;
+template<class U> struct Ptr<U*> {}; // { dg-error "specialization" }
+
+struct A {
+ using A = int;//{ dg-error "nested|has|same name as|class|in which|declared" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C
new file mode 100644
index 0000000..7c8bad9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+
+template <class T> using Ptr = T*;
+Ptr<unsigned>; // { dg-error "does not declare anything" }
+Ptr<char><int>; // { dg-error "not a template|does not declare anything" }
+template class Ptr<int>;//{ dg-error "alias template specialization\[^\n\r\]*after\[^\n\r\]*class" }
+
+template <class T> using Arg = T;
+struct A {};
+template class Arg<A>;// { dg-error "alias templ\[^\n\r\]*specialization\[^\n\r\]*Arg<A>\[^\n\r\]*after\[^\n\r\]*class" }
+
+template <template <class> class TT, class T> using Instantiate = TT<T>;
+template <class> struct Vector {};
+
+// The below is not OK, because of [dcl.type.elab]:
+//
+// If the identifier resolves to a typedef-name or the
+// simple-template-id resolves to an alias template
+// specialization, the elaborated-type-specifier is ill-formed.
+//
+template class Instantiate<Vector, int>;//{ dg-error "alias template specialization\[^\n\r\]*after\[^\n\r\]*class" }
+
+template <class T> struct S {};
+template<class T> using SFor = S<T>;
+// Likewise, this is not OK.
+template class SFor<int>; //{ dg-error "alias template specialization\[^\n\r\]*after\[^\n\r\]*class" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C
new file mode 100644
index 0000000..5457433
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+namespace N
+{
+ template <class T> using U = T*;
+}
+
+void f(N::U<int>) { blah; } // { dg-error "void f(N::U<int>)|not declared" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
new file mode 100644
index 0000000..df23e55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
@@ -0,0 +1,4 @@
+// Origin: PR c++/51027
+// { dg-do compile { target c++11 } }
+
+using INT = int // { dg-error "expected|;|at end of input" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C
new file mode 100644
index 0000000..368e5af
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C
@@ -0,0 +1,24 @@
+// Origin PR c++/51191
+// { dg-do compile { target c++11 } }
+
+template< class T >
+class ClassTemplate {};
+
+template< class T >
+struct Metafunction {
+ typedef T type;
+};
+
+template< class T >
+using TemplateAlias = ClassTemplate< typename Metafunction<T>::type >;
+
+using Alias = TemplateAlias<int>;
+
+template< class T >
+void f( TemplateAlias<T> );
+
+int main()
+{
+ Alias x;
+ f( x ); // { dg-error "no matching function for call to|f" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C
new file mode 100644
index 0000000..52f2201
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C
@@ -0,0 +1,14 @@
+// Origin: PR c++/51145
+// { dg-do compile { target c++11 } }
+
+struct A {};
+
+template<class>
+using X = A;
+
+struct X<int>* px; // { dg-error "using\[^\n\r\]*alias\[^\n\r\]*specialization\[^\n\r\]*X<int>\[^\n\r\]*after\[^\n\r\]*struct|invalid type in declaration before\[^\n\r\]*;" }
+
+template<int>
+using Y = A;
+
+struct Y<0>* py;// { dg-error "alias\[^\n\r\]*specialization\[^\n\r\]*Y<0>\[^\n\r\]*after\[^\n\r\]*struct|invalid type in declaration before\[^\n\r\]*;" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C
new file mode 100644
index 0000000..2d617ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C
@@ -0,0 +1,17 @@
+// Origin PR c++/51194
+// { dg-do compile { target c++11 } }
+
+template<class U, class V> //#1
+struct foo {};
+
+template<class U, class V=char>
+struct P {};
+
+template<template<class... U> class... TT>
+struct bar {
+ template<class... Args>
+ using mem = P<TT<Args...>...>;//#2
+};
+
+bar<foo>::mem<int, char> b;//#3
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C
new file mode 100644
index 0000000..d934a93
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C
@@ -0,0 +1,28 @@
+// Origin PR c++/51143
+// { dg-do compile { target c++11 } }
+
+using A0 = struct B0 { void f() {} };
+
+template<int N>
+using A1 =
+ struct B1 { // { dg-error "types may not be defined in alias template" }
+ static auto constexpr value = N;
+ };
+
+A1<0> a1;
+
+template<class T>
+using A2 =
+ struct B2 { // { dg-error "types may not be defined in alias template" }
+ void f(T){}
+ };
+
+A2<bool> a2;
+
+template<class T>
+using A3 =
+ enum B3 {b = 0;}; //{ dg-error "types may not be defined in alias template" }
+
+A3<int> a3; // { dg-error "'A3' does not name a type" }
+
+int main() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C
new file mode 100644
index 0000000..bf947fb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C
@@ -0,0 +1,21 @@
+// Origin PR c++/51289
+// { dg-do compile { target c++11 } }
+
+template<typename a, template <typename, typename> class b>
+struct foo {
+ template <typename t>
+ using type = b<a, t>;
+ template <typename t>
+ b<a, t> funca() {}
+
+ template <typename t>
+ type<t> funcb() {}
+};
+
+// This is an additional test, to emit an error message when using
+// unexpanded parameter packs in an alias declaration.
+template <class ... T>
+struct S {};
+
+template<class ... T>
+using A = S<T>; // { dg-error "parameter packs not expanded" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C
new file mode 100644
index 0000000..199b054
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C
@@ -0,0 +1,9 @@
+// Origin: PR c++/51541
+// { dg-do compile { target c++11 } }
+
+template<typename Z> using ::T = void(int n); // { dg-error "" }
+template<typename Z> using operator int = void(int n); // { dg-error "" }
+template<typename Z> using typename U = void; // { dg-error "" }
+template<typename Z> using typename ::V = void(int n); // { dg-error "" }
+template<typename Z> using typename ::operator bool = void(int n); // { dg-error "" }
+using foo __attribute__((aligned(4)) = int; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-19.C
new file mode 100644
index 0000000..b101cb3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-19.C
@@ -0,0 +1,31 @@
+// PR c++/53567
+// { dg-do compile { target c++11 } }
+
+template <unsigned int, bool> struct IntegerType { typedef unsigned type; };
+
+template <class EnumT>
+using UnderlyingEnumType = typename IntegerType<sizeof(EnumT), (EnumT(-1) > EnumT(0))>::type;
+
+template <class EnumT, class UnderlyingT = UnderlyingEnumType<EnumT>>
+struct EnumMask
+{
+ constexpr EnumMask(EnumT val) : m_val(val) {}
+ operator EnumT() { return m_val; }
+
+ EnumT m_val;
+};
+
+enum class A : unsigned { x };
+
+template <class EnumT>
+EnumMask<EnumT> operator ~(EnumT lhs)
+{
+ return EnumT(~unsigned(lhs) & unsigned(EnumT::maskAll)); // { dg-error "not a member" }
+
+}
+
+int main()
+{
+ ~A::x;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C
new file mode 100644
index 0000000..0204f64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++11 } }
+
+template<class T> struct S0 {};
+template<class T> using AS0 = S0<T>;
+
+template<template<class> class TT>
+void f(TT<int>);
+
+template class AS0<char>; // { dg-error "alias templ\[^\n\r\]*specialization\[^\n\r\]*after\[^\n\r\]*class" }
+
+void
+foo()
+{
+ AS0<int> a;
+ f(a);
+}
+
+template<class T, class U> struct Vector{};
+template<class T> struct Alloc {};
+
+template<class T> using Vec = Vector<T, Alloc<T> >;
+
+template<class T> void g(Vector<T, Alloc<T> >);
+
+template<template<class T> class TT> void h(TT<int>); // { dg-error "provided for" }
+
+void
+bar()
+{
+ Vec<int> a;
+ g(a);
+ h(a); // { dg-error "no matching function|wrong number of template arguments" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C
new file mode 100644
index 0000000..078d257
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C
@@ -0,0 +1,9 @@
+// PR c++/53858
+// { dg-do compile { target c++11 } }
+
+template <typename T> struct s0 { typedef T tdef0; };
+template <typename T> struct s1 { typedef T tdef1; };
+template <typename T> using us1 = typename s1<T>::tdef1;
+template <typename T, typename TT = typename us1<T>::tdef0> struct s2 {};
+
+int main () { return 0; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C
new file mode 100644
index 0000000..463f539
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-21.C
@@ -0,0 +1,23 @@
+// PR c++/54575
+// { dg-do compile { target c++11 } }
+
+template<typename _From, typename _To>
+struct is_convertible { static const bool value = true; };
+
+template<bool> struct enable_if { };
+template<> struct enable_if<true> { typedef int type; };
+
+template<typename _InIter>
+using _RequireInputIter
+= typename enable_if<is_convertible<_InIter,bool>::value>::type;
+
+template<typename _Tp> struct X {
+ template<typename _InputIterator,
+ typename = _RequireInputIter<_InputIterator>>
+ void insert(_InputIterator) {}
+};
+
+template<typename> void foo() {
+ X<int> subdomain_indices;
+ subdomain_indices.insert(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C
new file mode 100644
index 0000000..1f6cb8f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-22.C
@@ -0,0 +1,12 @@
+// The standard is unclear about whether this testcase is well-formed.
+// Clang considers it well-formed, EDG not. Let's go with EDG for now.
+// { dg-do compile { target c++11 } }
+
+template <class T>
+using foo = typename T::bar; // { dg-error "this context" }
+
+class B
+{
+ typedef int bar; // { dg-error "private" }
+ foo<B> f; // { dg-message "required" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-23.C
new file mode 100644
index 0000000..0e4ba45
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-23.C
@@ -0,0 +1,17 @@
+// PR c++/52233
+// { dg-do compile { target c++11 } }
+
+template <typename t>
+struct foo
+{
+ template <template <typename...> class... xs>
+ using type = int;
+};
+
+template <typename t, template <typename...> class... xs>
+struct bar
+{
+ using type = typename foo<t>::template type<xs...>;
+};
+
+bar<int, foo> x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-24.C
new file mode 100644
index 0000000..b68fa93
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-24.C
@@ -0,0 +1,24 @@
+// Origin: PR c++/53540
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct context
+{
+ typedef int type;
+};
+
+template <typename T>
+void function()
+{
+ using ctx1 = context<T>;
+ typename ctx1::type f1;
+
+ typedef context<T> ctx2;
+ typename ctx2::type f2;
+}
+
+int main()
+{
+ function<int>();
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-25.C
new file mode 100644
index 0000000..a388ae4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-25.C
@@ -0,0 +1,10 @@
+// PR c++/54859
+// { dg-do compile { target c++11 } }
+
+template<unsigned N>
+ using Num = int;
+
+template<typename... Types>
+ using Count = Num<sizeof...(Types)>;
+
+Count<int, char, void> i;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-26.C
new file mode 100644
index 0000000..dd4cc02
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-26.C
@@ -0,0 +1,10 @@
+// Origin: PR c++/54466
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+ struct X { };
+
+template<typename T>
+ using Y = const X<T>;
+
+using Z = Y<int>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-27.C
new file mode 100644
index 0000000..91208ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-27.C
@@ -0,0 +1,11 @@
+// Origin: PR c++/54875
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+using AddConst = T const;
+
+enum FwdEnum : int;
+
+int main() {
+ AddConst<FwdEnum> *ptr = nullptr;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-28.C
new file mode 100644
index 0000000..086b5e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-28.C
@@ -0,0 +1,7 @@
+// Origin: PR c++/54401
+// { dg-do compile { target c++11 } }
+
+template<typename>
+struct X {
+ using type = T; // { dg-error "expected type-specifier|does not name a type" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-29.C
new file mode 100644
index 0000000..f6cc695
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-29.C
@@ -0,0 +1,10 @@
+// Origin: PR c++/52343
+// { dg-do compile { target c++11 } }
+
+template<typename>
+using A = int;
+
+template<template<class> class>
+struct B {};
+
+B<A> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C
new file mode 100644
index 0000000..2204c25
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C
@@ -0,0 +1,42 @@
+// { dg-do compile { target c++11 } }
+
+// Exercise some member alias templates ...
+
+template<class T, class U> class A0 {};
+
+template<class T>
+struct A1 {
+ template<class U> struct S {};
+ template<class U> using AA0 = A0<T, U>;
+
+ void f(A0<T, int>);
+
+ void
+ foo()
+ {
+ AA0<int> a;
+ const AA0<int> b;
+ f(a);
+ f(b);
+ }
+};
+
+void
+bar()
+{
+ A1<int> a1;
+ a1.foo();
+ A1<int>::AA0<int> a1aa0;
+ a1.f(a1aa0);
+}
+
+// ... some simple member alias ...
+struct B {
+ using A = int;
+};
+
+B::A a;
+
+// ... and some simple alias
+
+using Int = int;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-30.C
new file mode 100644
index 0000000..7ad5e6d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-30.C
@@ -0,0 +1,15 @@
+// Origin PR c++/55311
+// { dg-do compile { target c++11 } }
+
+template <const char *const C, typename T>
+struct A
+{};
+
+struct B {};
+
+extern constexpr char HELLO_WORLD[] = "hello world";
+
+A<HELLO_WORLD, B> g; // <-- This works fine
+
+template <typename T>
+using PartiallySpecialized = A<HELLO_WORLD, T>; // <-- This fails
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-31.C
new file mode 100644
index 0000000..83eea47
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-31.C
@@ -0,0 +1,20 @@
+// Origin: PR c++/55663
+// { dg-do compile { target c++11 } }
+
+template <typename>
+constexpr bool the_truth () { return true; }
+
+template <bool>
+ struct Takes_bool { };
+
+template<bool B>
+ using Alias = Takes_bool<B>;
+
+template<typename T>
+ struct test { using type = Alias<the_truth<T>()>; };
+
+int main () {
+ test<int> a;
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C
new file mode 100644
index 0000000..cb39edd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C
@@ -0,0 +1,20 @@
+// PR c++/56611
+// { dg-do compile { target c++11 } }
+
+template<class T> struct remove_reference { typedef T type; };
+template<class T> struct remove_reference<T&> { typedef T type; };
+template<class T> T declval() { return T(); }
+
+int f(int, int){return 0;}
+struct Func{};
+
+template<class... Args> using result2
+= decltype(f(declval<typename remove_reference<Args>::type>()...));
+
+template<class Sig> struct R;
+template<class This, class... Args> struct R< This(Args...) >
+{
+ typedef result2<Args...> type;
+};
+
+typedef R< Func(int, int) >::type R_type;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33.C
new file mode 100644
index 0000000..25781a4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33.C
@@ -0,0 +1,14 @@
+// PR c++/51239
+// { dg-require-effective-target c++11 }
+
+template<class... x>
+class list{};
+template<class a, class... b>
+using tail=list<b...>;
+template <class...T>
+void f(tail<T...>); // { dg-error "alias" }
+
+int main()
+{
+ f<int,int>({});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33a.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33a.C
new file mode 100644
index 0000000..a1c442e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-33a.C
@@ -0,0 +1,15 @@
+// PR c++/51239
+// { dg-require-effective-target c++11 }
+// This variant should work because tail is equivalent to list.
+
+template<class y, class... x>
+class list{};
+template<class a, class... b>
+using tail=list<a, b...>;
+template <class...T>
+void f(tail<T...>);
+
+int main()
+{
+ f<int,int>({});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C
new file mode 100644
index 0000000..4306ab7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C
@@ -0,0 +1,23 @@
+// PR c++/57222
+// { dg-require-effective-target c++11 }
+
+template <template <typename T> class Templ>
+using Bool = Templ<bool>;
+
+template <typename T>
+class Foo {
+private:
+public:
+ template<template<typename U> class Templ>
+ void method(Bool<Templ> boolTempl);
+};
+
+template <typename T>
+template <template <typename U> class Templ>
+void Foo<T>::method(Bool<Templ> boolTempl) {
+}
+
+int main() {
+ Foo<char> foo;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C
new file mode 100644
index 0000000..f412b30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C
@@ -0,0 +1,9 @@
+// PR c++/57279
+// { dg-require-effective-target c++11 }
+
+typedef void fc1() const; // OK
+typedef void frr1() &&; // OK
+typedef void fcr1() const &;
+using fc2 = void() const; // #4
+using frr2 = void() &&; // OK
+using fcr2 = void() const &; // #6
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-36.C
new file mode 100644
index 0000000..dd3a422
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-36.C
@@ -0,0 +1,6 @@
+// PR c++/53658
+// { dg-do compile { target c++11 } }
+
+struct A;
+template <typename> using Foo = const A;
+template <typename Item> Foo <Item> bar();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-37.C
new file mode 100644
index 0000000..d6a3e12
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-37.C
@@ -0,0 +1,21 @@
+// PR c++/57138
+// { dg-do compile { target c++11 } }
+
+template <template <typename ... X> class T, typename ... Y>
+struct D
+{
+ template <typename ... Z>
+ using type = T <Y..., Z...>; // { dg-error "pack expansion" }
+};
+template <typename T>
+class A {};
+template <typename X, typename Y>
+struct B;
+template <typename T>
+struct B <int, T>
+{
+ typedef A <T> type;
+};
+template <typename X, typename Y>
+using C = typename B <X, Y>::type;
+struct E : public D <C> {};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-38.C
new file mode 100644
index 0000000..bc98737
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-38.C
@@ -0,0 +1,41 @@
+// PR c++/58435
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct same { static const bool value = false; };
+template<typename T>
+struct same<T, T> { static const bool value = true; };
+
+template <template <typename> class F, typename T> struct apply
+{ typedef F<T> type; };
+template <template <typename> class F, typename T> struct applyc
+{ typedef const F<T> type; };
+template <template <typename> class F, typename T> struct applyv
+{ typedef volatile F<T> type; };
+template <template <typename> class F, typename T> struct applycv
+{ typedef const volatile F<T> type; };
+
+template <typename T> using map = T;
+template <typename T> using mapc = const T;
+template <typename T> using mapv = volatile T;
+template <typename T> using mapcv = const volatile T;
+
+static_assert(same<apply<map, int>::type, int>::value, "");
+static_assert(same<apply<mapc, int>::type, const int>::value, "");
+static_assert(same<apply<mapv, int>::type, volatile int>::value, "");
+static_assert(same<apply<mapcv, int>::type, const volatile int>::value, "");
+
+static_assert(same<applyc<map, int>::type, const int>::value, "");
+static_assert(same<applyc<mapc, int>::type, const int>::value, "");
+static_assert(same<applyc<mapv, int>::type, const volatile int>::value, "");
+static_assert(same<applyc<mapcv, int>::type, const volatile int>::value, "");
+
+static_assert(same<applyv<map, int>::type, volatile int>::value, "");
+static_assert(same<applyv<mapc, int>::type, const volatile int>::value, "");
+static_assert(same<applyv<mapv, int>::type, volatile int>::value, "");
+static_assert(same<applyv<mapcv, int>::type, const volatile int>::value, "");
+
+static_assert(same<applycv<map, int>::type, const volatile int>::value, "");
+static_assert(same<applycv<mapc, int>::type, const volatile int>::value, "");
+static_assert(same<applycv<mapv, int>::type, const volatile int>::value, "");
+static_assert(same<applycv<mapcv, int>::type, const volatile int>::value, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C
new file mode 100644
index 0000000..9fe5538
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C
@@ -0,0 +1,11 @@
+// PR c++/58856
+// { dg-require-effective-target c++11 }
+
+template <typename T>
+struct U1 {};
+
+template <typename T1, typename... Ts>
+using U2 = U1<T1>;
+
+template <typename T1, typename... Ts>
+using U3 = U2<T1, Ts...>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C
new file mode 100644
index 0000000..60edaf7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+// [temp.alias]/3:
+// The type-id in an alias template declaration shall not refer
+// to the alias template being declared. The type produced by an
+// alias template specialization shall not directly or indirectly
+// make use of that specialization.
+
+template <class T> struct A;
+template <class T> using B = typename A<T>::U; // { dg-error "type" }
+template <class T> struct A {
+ typedef B<T> U;
+};
+B<short> b; // { dg-error "invalid type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-40.C
new file mode 100644
index 0000000..f8bff78
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-40.C
@@ -0,0 +1,33 @@
+// PR c++/58170
+// { dg-require-effective-target c++11 }
+// { dg-prune-output "not declared" }
+// { dg-prune-output "expected" }
+
+template <typename T, typename U>
+struct base {
+ template <typename V>
+ struct derived;
+};
+
+template <typename T, typename U>
+template <typename V>
+struct base<T, U>::derived : public base<T, V> {
+};
+
+// This (wrong?) alias declaration provokes the crash.
+template <typename T, typename U, typename V>
+using alias = base<T, U>::derived<V>; // { dg-error "template|typename" }
+
+// This one works:
+// template <typename T, typename U, typename V>
+// using alias = typename base<T, U>::template derived<V>;
+
+template <typename T>
+void f() {
+ alias<T, bool, char> m{};
+ (void) m;
+}
+
+int main() {
+ f<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
new file mode 100644
index 0000000..c444217
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
@@ -0,0 +1,18 @@
+// PR c++/60182
+// { dg-require-effective-target c++11 }
+
+class B {};
+template <typename> using __allocator_base = B;
+template <typename> class F : __allocator_base<int> {};
+class C {};
+template <typename, typename = F<int> > class G : C {};
+template <typename> class D;
+class A {
+ using Container = G<D<char>>;
+ A();
+ A(D<char> const &);
+ Container m_elements;
+};
+template <template <class, class> class C, class A = F<D<int>>>
+void doSomething(C<D<char>, A> &);
+A::A(D<char> const &) : A() { doSomething(m_elements); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C
new file mode 100644
index 0000000..559fc51
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C
@@ -0,0 +1,34 @@
+// { dg-do compile { target c++11 } }
+
+// alias template of a partial specialization
+
+template<class T, class U, class W> struct S0 {};
+template<class T, class U> struct S0<T, U, char> {};
+template<class T> using AS0 = S0<T, int, char>;
+void foo(S0<bool, int, char>);
+
+AS0<bool> a; // OK
+
+void
+f()
+{
+ foo(a); //OK
+}
+
+// alias template of an explicit specialization of a member template
+
+template<class T>
+struct S1 {
+ template<class U>
+ struct M {};
+};
+template<class T> using AM = S1<int>::M<T>;
+void bar(S1<int>::M<bool>);
+
+AM<bool> b; //OK.
+
+void
+g()
+{
+ bar(b); //OK
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C
new file mode 100644
index 0000000..e0faf2b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+// Alias template of non-class types.
+
+template <class T, class U> struct same;
+template <class T> struct same<T,T> {};
+
+template <class T> using Ptr = T*;
+template <template <class> class T> struct A {
+ template <class U> using X = T<U>;
+};
+same<A<Ptr>::X<int>,int*> s;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
new file mode 100644
index 0000000..f5911d9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+
+// Add arguments to unbound template template parameter.
+
+template <template <class> class Template>
+struct Internal {
+ template <class Arg> using Bind = Template<Arg>;
+};
+
+template <template <class> class Template, class Arg>
+using Instantiate = Template<Arg>; // After parsing #1, the
+ // BOUND_TEMPLATE_TEMPLATE_PARM
+ // parameter Template gets
+ // the UNBOUND_CLASS_TEMPLATE
+ // Internal<Template>::template Bind
+ // as an argument, and the
+ // parameter Arg gets Argument as
+ // an argument. And we build
+ // 'Bind<Argument>'.
+
+template <template <class> class Template, class Argument>
+using Bind = Instantiate<Internal<Template>::template Bind, Argument>; //#1
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C
new file mode 100644
index 0000000..c40fbbb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C
@@ -0,0 +1,32 @@
+// { dg-do compile { target c++11 } }
+
+struct A {
+ template <class U> using C = U;
+};
+
+// The particularity of the below struct is to have more than 7
+// fields. In this case, looking up a member here should exercise
+// cp/search.c:lookup_field_1 in such a way that it finds it in the
+// CLASSTYPE_SORTED_FIELDS of struct A7.
+struct A7 {
+ int f0;
+ int f1;
+ int f2;
+ int f3;
+ int f4;
+ int f5;
+ int f6;
+ int f7;
+ template <class U> using C = U;
+};
+
+template <class T>
+struct B {
+ typename T::template C<int> n; //#0
+};
+
+// These should trigger the lookup
+// of template C inside class A or
+// A7, via #0.
+B<A> b;
+B<A7> c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C
new file mode 100644
index 0000000..5794617
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A {
+ using Result = T;
+};
+template <class A> using Arg = typename A::Result;
+Arg<A<int>> b;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
new file mode 100644
index 0000000..524216a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
@@ -0,0 +1,13 @@
+// Origin: PR c++/51032
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* nios2-*-* } { "*" } { "" } }
+// { dg-options "-gstabs+" }
+
+template <class C>
+struct A {
+ template<class U> using B = U*;
+ int a;
+};
+
+A<int> a;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286.C
new file mode 100644
index 0000000..0c545c7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286.C
@@ -0,0 +1,13 @@
+// DR 1286: An alias template can be equivalent to an underlying template.
+// { dg-do compile { target c++11 } }
+
+template <class T, class U> struct same;
+template <class T> struct same<T,T> {};
+
+template <class T> struct A {};
+template <class T> using B = A<T>;
+
+template <template <class> class T> class C {};
+
+void f(C<B>) { } // { dg-final { scan-assembler "_Z1f1CI1AE" } }
+same<C<A>, C<B> > s;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286a.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286a.C
new file mode 100644
index 0000000..1780c9a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286a.C
@@ -0,0 +1,60 @@
+// DR 1286
+// { dg-do compile { target c++11 } }
+
+template <class,class> struct same;
+template <class T> struct same<T,T> {};
+
+template <class,class> struct different {};
+template <class T> struct different<T,T>;
+
+template<typename T, typename U = T> struct A;
+template<template <class...> class> struct X;
+
+// equivalent to A
+template<typename V, typename W>
+using B = A<V, W>;
+
+same<X<A>,X<B>> s1;
+
+// not equivalent to A: not all parameters used
+template<typename V, typename W>
+using C = A<V>;
+
+different<X<A>,X<C>> d1;
+
+// not equivalent to A: different number of parameters
+template<typename V>
+using D = A<V>;
+
+different<X<A>,X<D>> d2;
+
+// not equivalent to A: template-arguments in wrong order
+template<typename V, typename W>
+using E = A<W, V>;
+
+different<X<A>,X<E>> d3;
+
+// equivalent to A: default arguments not considered
+template<typename V, typename W = int>
+using F = A<V, W>;
+
+same<X<A>,X<F>> s2;
+
+// equivalent to A and B
+template<typename V, typename W>
+using G = A<V, W>;
+
+same<X<A>,X<G>> s3;
+same<X<B>,X<G>> s3b;
+
+// equivalent to E
+template<typename V, typename W>
+using H = E<V, W>;
+
+same<X<E>,X<H>> s4;
+
+// not equivalent to A: argument not identifier
+template<typename V, typename W>
+using I = A<V, typename W::type>;
+
+different<X<A>,X<I>> d4;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286b.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286b.C
new file mode 100644
index 0000000..fef9818
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-dr1286b.C
@@ -0,0 +1,12 @@
+// PR c++/60328
+// { dg-require-effective-target c++11 }
+
+template <class _T, class... _Rest>
+struct Foo
+{
+ template <class _TT, class... _RR>
+ using Bar = Foo<_TT, _RR...>;
+
+ using Normal = Foo<_Rest...>;
+ using Fail = Bar<_Rest...>;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-enum-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-enum-1.C
new file mode 100644
index 0000000..260a193
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alias-decl-enum-1.C
@@ -0,0 +1,47 @@
+// PR c++/57734
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct same_type { static const bool value = false; };
+
+template<typename T>
+struct same_type<T, T> { static const bool value = true; };
+
+enum e { zero };
+enum class eclass { one };
+
+template<typename T>
+using enum_alias = e;
+
+template<typename T>
+using eclass_alias = eclass;
+
+typedef enum_alias<void> etest0;
+typedef enum_alias<void> etest0;
+typedef enum_alias<int> etest0;
+typedef enum_alias<int> etest1;
+
+static_assert (same_type<etest0, etest1>::value, "");
+
+typedef eclass_alias<void> ectest0;
+typedef eclass_alias<void> ectest0;
+typedef eclass_alias<int> ectest0;
+typedef eclass_alias<int> ectest1;
+
+static_assert (same_type<ectest0, ectest1>::value, "");
+
+template<typename T>
+enum_alias<T> efoo(T f) { return enum_alias<T>::zero; }
+
+template<typename T>
+constexpr enum_alias<T> cefoo(T f) { return enum_alias<T>::zero; }
+
+static_assert ( cefoo(1) == e::zero, "");
+
+template<typename T>
+eclass_alias<T> ecfoo(T f) { return eclass_alias<T>::one; }
+
+template<typename T>
+constexpr eclass_alias<T> cecfoo(T f) { return eclass_alias<T>::one; }
+
+static_assert ( cecfoo(1) == eclass::one, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof.C
new file mode 100644
index 0000000..92422f9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+int main(void)
+{
+ static_assert(alignof(int) == __alignof(int), "alignof(int) does not equal __alignof(int)");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof2.C
new file mode 100644
index 0000000..d571d9d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof2.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+int main(void)
+{
+ alignof(int); //ok with a type but not with an expression
+ alignof(3); // { dg-warning "alignof" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof3.C
new file mode 100644
index 0000000..c349cec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof3.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+int main(void)
+{
+ alignof(void (void)); // { dg-warning "function type" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof4.C
new file mode 100644
index 0000000..ca3c47a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/alignof4.C
@@ -0,0 +1,7 @@
+// PR c++/51316
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ alignof(int []);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto1.C
new file mode 100644
index 0000000..b8d3905
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto1.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-std=c++98 -Wc++11-compat" }
+
+// Test warning for use of auto in C++98 mode with C++11
+// compatibility warnings
+void f()
+{
+ auto int x = 5; // { dg-warning "changes meaning" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto10.C
new file mode 100644
index 0000000..296873e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto10.C
@@ -0,0 +1,21 @@
+// Positive test for auto
+// { dg-do run { target c++11 } }
+
+#include <typeinfo>
+extern "C" void abort();
+
+int main()
+{
+ if (auto i = 42L)
+ {
+ if (typeid (i) != typeid (long int))
+ abort ();
+ }
+
+ while (auto i = 1)
+ {
+ if (typeid (i) != typeid (int))
+ abort ();
+ break;
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto11.C
new file mode 100644
index 0000000..208f512
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto11.C
@@ -0,0 +1,12 @@
+// PR c++/38256
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+ template<typename T> operator T();
+};
+
+void foo()
+{
+ A<0>().operator auto(); // { dg-error "auto" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto14.C
new file mode 100644
index 0000000..0ada265
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto14.C
@@ -0,0 +1,28 @@
+// PR c++/40306, c++/40307
+// { dg-do run { target c++11 } }
+
+template< typename T >
+struct test {
+ test run() {
+ auto tmp = *this;
+ return tmp;
+ }
+ test run_pass() {
+ test tmp( *this );
+ return tmp;
+ }
+
+ test run_fail() {
+ auto tmp( *this );
+ return tmp;
+ }
+};
+
+int main()
+{
+ test<int> x;
+ x.run();
+ x.run_pass();
+ x.run_fail();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto15.C
new file mode 100644
index 0000000..ca5758d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto15.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+template< typename Fn > struct function;
+
+template< typename Result, typename ... ArgTypes >
+struct function< auto (ArgTypes...)->Result > {
+};
+
+int main()
+{
+ function< auto(double)->int > y;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto16.C
new file mode 100644
index 0000000..e9754f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto16.C
@@ -0,0 +1,7 @@
+// PR c++/40619
+// { dg-do compile { target c++11 } }
+
+template<typename U> struct X {};
+
+template<typename T> auto f(T t) -> X<decltype(t+1)> {}
+template<typename T> auto g(T t) -> X<decltype(t+1)> {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto17.C
new file mode 100644
index 0000000..7f9529e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto17.C
@@ -0,0 +1,10 @@
+// PR c++/42567
+// { dg-do compile { target c++11 } }
+
+template<typename B>
+struct A {
+ template<typename C>
+ void fn(C c) {
+ auto& key = *c;
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto18.C
new file mode 100644
index 0000000..e6ddf0c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto18.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+void f()
+{
+ auto val = val; // { dg-error "auto" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto19.C
new file mode 100644
index 0000000..d27d437
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto19.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+struct Explicit {
+ Explicit() = default; // Line 2
+ explicit Explicit(const Explicit&){}
+} ex;
+
+auto ex2(ex); // Line 6
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto2.C
new file mode 100644
index 0000000..cff36d2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto2.C
@@ -0,0 +1,73 @@
+// Positive test for auto
+// { dg-do run { target c++11 } }
+
+#include <typeinfo>
+extern "C" void abort();
+
+int f() {}
+
+struct A
+{
+ int i;
+ int f() {}
+ A operator+(A a) { return a; }
+};
+
+template <class T>
+void g(T t)
+{
+ auto x = t+t;
+ if (typeid(x) != typeid(t+t))
+ abort();
+
+ auto p = new auto(&t);
+ if (typeid(p) != typeid(T**))
+ abort();
+}
+
+int main()
+{
+ auto i = 42;
+ if (typeid (i) != typeid (int))
+ abort();
+
+ auto *p = &i;
+ if (typeid (p) != typeid (int*))
+ abort();
+
+ auto *p2 = &p;
+ if (typeid (p2) != typeid (int**))
+ abort();
+
+ auto (*fp)() = f;
+ if (typeid (fp) != typeid (int (*)()))
+ abort();
+
+ auto A::* pm = &A::i;
+ if (typeid (pm) != typeid (int A::*))
+ abort();
+
+ auto (A::*pmf)() = &A::f;
+ if (typeid (pmf) != typeid (int (A::*)()))
+ abort();
+
+ g(42);
+ g(10.f);
+ g(A());
+
+ auto *p3 = new auto (i);
+ if (typeid (p3) != typeid (int*))
+ abort();
+
+ for (auto idx = i; idx != 0; idx = 0);
+ while (auto idx = 0);
+ if (auto idx = 1);
+
+ switch (auto s = i)
+ {
+ case 42:
+ break;
+ }
+
+ auto j = 42, k = 24;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto20.C
new file mode 100644
index 0000000..fe9925d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto20.C
@@ -0,0 +1,20 @@
+// Test for proper non-deduced context handling of the initializer
+// for an auto declaration/new.
+// { dg-do compile { target c++11 } }
+
+struct with_apply
+{
+ template <unsigned>
+ void apply(const double&){}
+};
+
+auto p = &with_apply::apply<0>;
+auto pp = new auto(&with_apply::apply<0>);
+
+template <class T>
+void f()
+{
+ auto p = &T::template apply<0>;
+}
+
+template void f<with_apply>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto21.C
new file mode 100644
index 0000000..a827b3d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto21.C
@@ -0,0 +1,5 @@
+// Origin PR c++/47208
+// { dg-do compile { target c++11 } }
+
+constexpr auto list = { }; // { dg-error "deducing from brace-enclosed initializer list requires #include <initializer_list>" }
+static const int l = list.size();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto22.C
new file mode 100644
index 0000000..4ae1d1c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto22.C
@@ -0,0 +1,21 @@
+// PR c++/47999
+// { dg-do compile { target c++11 } }
+
+int& identity(int& i)
+{
+ return i;
+}
+
+// In a function template, auto type deduction works incorrectly.
+template <typename = void>
+void f()
+{
+ int i = 0;
+ auto&& x = identity(i); // Type of x should be `int&`, but it is `int&&`.
+}
+
+int main (int argc, char* argv[])
+{
+ f();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto23.C
new file mode 100644
index 0000000..f14c2b8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto23.C
@@ -0,0 +1,4 @@
+// PR c++/46245
+// { dg-do compile { target c++11 } }
+
+template<auto f()->int> struct A { };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto24.C
new file mode 100644
index 0000000..d370cc6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto24.C
@@ -0,0 +1,5 @@
+// PR c++/48599
+// { dg-do compile { target c++11 } }
+
+int v[1];
+auto (*p)[1] = &v; // { dg-error "array of .auto" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto25.C
new file mode 100644
index 0000000..9e08a5b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto25.C
@@ -0,0 +1,12 @@
+// PR c++/42056
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+ int a[auto(1)]; // { dg-error "invalid use of" }
+};
+
+template<int> void foo()
+{
+ int a[auto(1)]; // { dg-error "invalid use of" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto26.C
new file mode 100644
index 0000000..d355a63
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto26.C
@@ -0,0 +1,21 @@
+// PR c++/43321
+// { dg-do compile { target c++11 } }
+
+template <class T>
+void f(T t)
+{
+ auto *p = t;
+}
+
+template <class T>
+void g(const T& tr)
+{
+ auto p = *tr;
+}
+
+int main()
+{
+ int b;
+ f(&b);
+ g(&b);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto27.C
new file mode 100644
index 0000000..f8e9097
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto27.C
@@ -0,0 +1,6 @@
+// PR c++/51186
+
+auto main()->int // { dg-error "std=" "std" { target { ! c++11 } } }
+ // { dg-error "auto" "auto" { target { ! c++11 } } 3 }
+ // { dg-error "no type" "no type" { target { ! c++11 } } 3 }
+{ }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto28.C
new file mode 100644
index 0000000..441d884
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto28.C
@@ -0,0 +1,4 @@
+// PR c++/51404
+// { dg-do compile { target c++11 } }
+
+int i = auto().x; // { dg-error "invalid use of" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto29.C
new file mode 100644
index 0000000..80fdc12
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto29.C
@@ -0,0 +1,24 @@
+// PR c++/51401
+// { dg-do compile { target c++11 } }
+
+template <int>
+struct A
+{
+ auto i; // { dg-error "non-static data member declared" }
+};
+
+template <int>
+struct B
+{
+ auto i = 0; // { dg-error "non-static data member declared" }
+};
+
+struct C
+{
+ auto i; // { dg-error "non-static data member declared" }
+};
+
+struct D
+{
+ auto i = 0; // { dg-error "non-static data member declared" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto3.C
new file mode 100644
index 0000000..c2e5519
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto3.C
@@ -0,0 +1,27 @@
+// Negative test for auto
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+auto x; // { dg-error "auto" }
+
+// If the type deduced for the template parameter U is not the same in each
+// deduction, the program is ill-formed.
+auto i = 42, j = 42.0; // { dg-error "auto" }
+
+// New CWG issue
+auto a[2] = { 1, 2 }; // { dg-error "auto|initializer_list" }
+
+template<class T>
+struct A { };
+
+A<int> A1;
+// CWG issue 625
+A<auto> A2 = A1; // { dg-error "" }
+
+auto foo() { } // { dg-error "auto" "" { target { ! c++1y } } }
+
+void bar(auto i) // { dg-error "incomplete|auto" }
+{
+ (void)i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto30.C
new file mode 100644
index 0000000..cce67d5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto30.C
@@ -0,0 +1,9 @@
+// Origin PR c++/51473
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ auto friend struct B; // { dg-error "multiple types|can only be specified|friend" }
+};
+
+auto int; // { dg-error "multiple types|can only be specified for variables" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto31.C
new file mode 100644
index 0000000..26a6560
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto31.C
@@ -0,0 +1,12 @@
+// PR c++/51416
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename... U> void foo(T, U... u)
+{
+ auto foo(u...); // { dg-error "auto" }
+}
+
+void bar()
+{
+ foo(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto32.C
new file mode 100644
index 0000000..2aad34e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto32.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+// { dg-final { scan-assembler "_Z1fIiEDTnw_Dapifp_EET_" } }
+template <class T> auto f(T t) -> decltype (new auto(t));
+
+int main()
+{
+ f(1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto33.C
new file mode 100644
index 0000000..dade5a8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto33.C
@@ -0,0 +1,15 @@
+// PR c++/53484
+// { dg-do compile { target c++11 } }
+
+template<class T,class U> struct ST;
+template<class T> struct ST<T,T> {};
+
+template <class T>
+void f(T x){
+ [&]{
+ auto y = x;
+ ST<decltype(y),int>();
+ }();
+}
+
+int main(){ f(0); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto34.C
new file mode 100644
index 0000000..3682d60
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto34.C
@@ -0,0 +1,18 @@
+// PR c++/51421
+// { dg-do compile { target c++11 } }
+
+int foo1(int);
+
+void bar1()
+{
+ auto i = foo1(i); // { dg-error "before deduction" }
+}
+
+struct A {};
+
+A foo2(A);
+
+void bar2()
+{
+ auto a = foo2(a); // { dg-error "before deduction" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto35.C
new file mode 100644
index 0000000..55eebbe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto35.C
@@ -0,0 +1,11 @@
+// PR c++/53122
+// { dg-do compile { target c++11 } }
+
+template<typename... Args>
+ void foo(Args&&...) { }
+
+template<typename... Args>
+ void bar(Args&&...)
+{
+ auto fn = foo<Args...>;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto36.C
new file mode 100644
index 0000000..586bc6e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto36.C
@@ -0,0 +1,18 @@
+// PR c++/54903
+// { dg-do compile { target c++11 } }
+
+template<int N, int D>
+struct Modulus
+{
+ static auto const value = N % D;
+};
+
+template<int N>
+struct Angle
+{
+ static auto const value = Modulus<N, 360>::value; // ERROR
+ //static int const value = Modulus<N, 360>::value; // OK
+ //static auto const value = N % 360; // OK
+
+ typedef Angle<value> type;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto37.C
new file mode 100644
index 0000000..f4b2904
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto37.C
@@ -0,0 +1,14 @@
+// PR c++/55003
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct A {
+ static const auto t
+ = (typename T::type)42;
+};
+
+struct X {
+ typedef int type;
+};
+
+A<X> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto38.C
new file mode 100644
index 0000000..070a39b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto38.C
@@ -0,0 +1,8 @@
+// PR c++/57183
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-variable" }
+
+constexpr float PI_0 = 3.1415926F;
+constexpr auto PI_1 = 3.1415926F;
+const float PI_2 = 3.1415926F;
+const auto PI_3 = 3.1415926F;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto39.C
new file mode 100644
index 0000000..dfa1fb4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto39.C
@@ -0,0 +1,6 @@
+// PR c++/58560
+// { dg-do compile { target c++11 } }
+
+typedef auto T; // { dg-error "typedef declared 'auto'" }
+
+void foo() { T(); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto4.C
new file mode 100644
index 0000000..36144fd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto4.C
@@ -0,0 +1,27 @@
+// Testcase for deduction of std::initializer_list for auto.
+// { dg-do run { target c++11 } }
+
+#include <typeinfo>
+#include <initializer_list>
+extern "C" void abort();
+
+template <class T>
+void f (T t)
+{
+ auto ilt = { &t, &t };
+ if (typeid(ilt) != typeid(std::initializer_list<T*>))
+ abort();
+
+ auto il = { 1, 2, 3 };
+ if (typeid(il) != typeid(std::initializer_list<int>))
+ abort();
+}
+
+int main()
+{
+ auto il = { 1, 2, 3 };
+ if (typeid(il) != typeid(std::initializer_list<int>))
+ abort();
+
+ f('c');
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto40.C
new file mode 100644
index 0000000..287191e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto40.C
@@ -0,0 +1,11 @@
+// PR c++/58888
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ static constexpr auto b{1.0};
+};
+
+constexpr decltype(A::b) A::b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto41.C
new file mode 100644
index 0000000..b2a7755
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto41.C
@@ -0,0 +1,5 @@
+// PR c++/58550
+// { dg-do compile { target c++11 } }
+
+auto foo(); // { dg-error "auto" "" { target { ! c++1y } } }
+auto fp = foo; // { dg-error "auto" "" { target c++1y } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto5.C
new file mode 100644
index 0000000..8ed66d1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto5.C
@@ -0,0 +1,22 @@
+// Testcase for non-dependent auto in templates
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template<class> void f();
+} a;
+
+template <class T>
+void g()
+{
+ auto aa = a;
+ aa.f<int>();
+
+ auto p = new auto (a);
+ p->f<int>();
+}
+
+int main()
+{
+ g<double>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto7.C
new file mode 100644
index 0000000..c213c74
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto7.C
@@ -0,0 +1,13 @@
+// PR c++/37965
+// Negative test for auto
+// { dg-do compile { target c++11 } }
+
+auto i = 6;
+auto j; // { dg-error "has no initializer" }
+
+template<int> struct A
+{
+ static auto k = 7; // { dg-error "non-const" }
+ static auto l; // { dg-error "has no initializer" }
+ auto m; // { dg-error "non-static data member declared" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto9.C
new file mode 100644
index 0000000..205bb96
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/auto9.C
@@ -0,0 +1,123 @@
+// PR c++/37962
+// Negative test for auto
+// { dg-do compile { target c++11 } }
+
+#include <typeinfo>
+#include <stdarg.h>
+#include <stddef.h>
+
+int i = *(auto *) 0; // { dg-error "auto" }
+struct A *p = (auto *) 0; // { dg-error "auto" }
+int *q = static_cast <auto *>(0); // { dg-error "auto" }
+const int *r = const_cast <auto *>(q); // { dg-error "auto" }
+const std::type_info &t1 = typeid (auto); // { dg-error "auto" }
+const std::type_info &t2 = typeid (auto *); // { dg-error "auto" }
+
+struct A
+{
+ operator auto (); // { dg-error "auto" "" { target { ! c++1y } } }
+ operator auto *(); // { dg-error "auto" "" { target { ! c++1y } } }
+};
+
+struct A2
+{
+ operator auto () -> int; // { dg-error "invalid use of" "" { target { ! c++1y } } }
+ operator auto *() -> int; // { dg-error "auto" }
+};
+
+template <typename> struct B
+{
+ enum { e };
+};
+
+template <typename T> struct C
+{
+ C () : i () {}
+ int i;
+};
+
+bool d = (auto (A::*)()) 0; // { dg-error "auto" }
+
+void
+foo ()
+{
+ __extension__ (auto) { 0 }; // { dg-error "auto" }
+ C<int> c;
+ dynamic_cast<auto> (c); // { dg-error "auto" }
+ reinterpret_cast<auto> (c); // { dg-error "auto" }
+ int i = auto (0); // { dg-error "auto" }
+ auto p1 = new (auto); // { dg-error "auto" }
+ auto p2 = new (auto) (42); // { dg-error "invalid use of|deduce" }
+ offsetof (auto, fld); // { dg-error "auto" }
+ offsetof (auto *, fld); // { dg-error "auto" }
+ sizeof (auto); // { dg-error "auto" }
+ sizeof (auto *); // { dg-error "auto" }
+}
+
+void
+foo2 (void)
+{
+ __alignof__ (auto); // { dg-error "auto" }
+ __alignof__ (auto *); // { dg-error "auto" }
+ __typeof__ (auto) v1; // { dg-error "auto" }
+ __typeof__ (auto *) v2; // { dg-error "auto" }
+ __is_class (auto); // { dg-error "auto|expected" }
+ __is_pod (auto *); // { dg-error "auto|expected" }
+ __is_base_of (int, auto); // { dg-error "auto|expected" }
+ __is_base_of (auto, int); // { dg-error "auto|expected" }
+ __is_base_of (auto, auto *); // { dg-error "auto|expected" }
+}
+
+B<auto> b; // { dg-error "auto|invalid" }
+C<auto> c; // { dg-error "auto|invalid" }
+C<auto *> c2; // { dg-error "auto|invalid" }
+
+enum : auto { EE = 0 }; // { dg-error "must be an integral type" }
+enum struct D : auto * { FF = 0 }; // { dg-error "must be an integral type|declar|expected" }
+
+void
+bar ()
+{
+ try { } catch (auto i) { } // { dg-error "parameter" }
+ try { } catch (auto) { } // { dg-error "parameter" }
+ try { } catch (auto *i) { } // { dg-error "parameter" }
+ try { } catch (auto *) { } // { dg-error "parameter" }
+}
+
+void
+baz (int i, ...)
+{
+ va_list ap;
+ va_start (ap, i);
+ va_arg (ap, auto); // { dg-error "invalid use of" }
+ va_arg (ap, auto *); // { dg-error "invalid use of|expected" }
+ va_arg (ap, auto &); // { dg-error "invalid use of|expected" }
+ va_end (ap);
+}
+
+template <typename T = auto> struct E {}; // { dg-error "invalid use of" }
+template <class T = auto *> struct F {}; // { dg-error "invalid use of|expected" }
+
+auto fnlate () -> auto; // { dg-error "invalid use of" "" { target { ! c++1y } } }
+auto fnlate2 () -> auto *; // { dg-error "invalid use of|expected" "" { target { ! c++1y } } }
+
+void
+badthrow () throw (auto) // { dg-error "invalid use of" }
+{
+}
+
+void
+badthrow2 () throw (auto &) // { dg-error "invalid use of|expected" }
+{
+}
+
+template <auto V = 4> struct G {}; // { dg-error "auto" }
+
+template <typename T> struct H { H (); ~H (); };
+H<auto> h; // { dg-error "invalid" }
+
+void qq (auto); // { dg-error "auto" }
+void qr (auto*); // { dg-error "auto" }
+
+// PR c++/46145
+typedef auto autot; // { dg-error "auto" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new1.C
new file mode 100644
index 0000000..2052d39
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new1.C
@@ -0,0 +1,19 @@
+// Test for throwing bad_array_new_length on invalid array length
+// { dg-do run { target c++11 } }
+
+#include <new>
+
+void * f(int i)
+{
+ return new int[i];
+}
+
+int main()
+{
+ try
+ {
+ f(-1);
+ }
+ catch (std::bad_array_new_length) { return 0; }
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new2.C
new file mode 100644
index 0000000..bcc9b9a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bad_array_new2.C
@@ -0,0 +1,20 @@
+// Test for throwing bad_array_new_length on invalid array length
+// { dg-do run { target c++11 } }
+
+#include <new>
+
+void * f(int i)
+{
+ return new int[i]{1,2,3,4};
+}
+
+int main()
+{
+ f(4); // OK
+ try
+ {
+ f(3);
+ }
+ catch (std::bad_array_new_length) { return 0; }
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bind.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bind.C
new file mode 100644
index 0000000..9b7ce7d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bind.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+struct S{};
+void f(S&&);
+
+int main()
+{
+ f(S());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket1.C
new file mode 100644
index 0000000..6f5c29720
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket1.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct list {};
+
+template<typename T>
+struct vector {
+ operator T() const;
+};
+
+void f()
+{
+ vector<vector<int>> v;
+ const vector<int> vi = static_cast<vector<int>>(v);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket2.C
new file mode 100644
index 0000000..35c8608
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket2.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+template<int i> class X { /* ... */ };
+X< 1>2 > x1; // // { dg-error "numeric constant" }
+X<(1>2)> x2; // Okay.
+
+template<class T> class Y { /* ... */ };
+Y<X<1>> x3; // Okay, same as "Y<X<1> > x3;".
+Y<X<6>>1>> x4; // { dg-error "numeric constant" }
+Y<X<(6>>1)>> x5; // Okay
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket3.C
new file mode 100644
index 0000000..93c7148
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket3.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-std=c++98 -Wc++11-compat" }
+
+template<int N> struct X {};
+
+X<1 >> 2> x; // { dg-warning "is treated as|suggest parentheses" }
+
+// From cp/parser.c
+typedef int Y;
+template <int V> struct Foo {};
+Foo<Y () >> 5> r; // { dg-warning "is treated as|suggest parentheses" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket4.C
new file mode 100644
index 0000000..256f4cb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/bracket4.C
@@ -0,0 +1,34 @@
+// { dg-do compile { target c++11 } }
+template<typename T>
+struct vector {
+};
+
+struct X {
+ template<typename T>
+ struct tmpl {
+ operator T() const;
+ };
+};
+
+template<typename T>
+void g()
+{
+ T::template tmpl<vector<int>>() + 2;
+}
+
+template<typename T>
+void operator+(vector<T>, int);
+
+void f()
+{
+ vector<vector<int>>() + 2;
+}
+
+// PR c++/36460
+template <class a>
+class A {};
+template <class b>
+class B {};
+
+A<B<void()>> x;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast-bug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast-bug.C
new file mode 100644
index 0000000..2b8ef33
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast-bug.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+struct S
+{
+ S();
+ S(S &&);
+private:
+ S(S &);
+};
+
+S f()
+{
+ S s;
+ return static_cast<S&&>(s);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast.C
new file mode 100644
index 0000000..d11d724
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/cast.C
@@ -0,0 +1,30 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test cast from lvalue to rvalue
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+
+struct A {};
+
+one foo(const A&) {return one();}
+two foo(A&&) {return two();}
+
+int test1()
+{
+ A a;
+ sa<sizeof(foo(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(foo(static_cast<A&&>(a))) == 2 * sizeof(long)> t2;
+ return 0;
+}
+
+int main()
+{
+ return test1();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/catch1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/catch1.C
new file mode 100644
index 0000000..81778ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/catch1.C
@@ -0,0 +1,16 @@
+// PR c++/53371
+// { dg-do compile { target c++11 } }
+
+struct Abs
+{
+ virtual void a() = 0;
+};
+
+void foo()
+{
+ try {
+ } catch (Abs) { } // { dg-error "abstract class type" }
+
+ try {
+ } catch (int&&) { } // { dg-error "rvalue reference type" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse-bug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse-bug.C
new file mode 100644
index 0000000..89fe031
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse-bug.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+template<typename T, typename U> struct same_type;
+template<typename T> struct same_type<T, T> {};
+
+template <typename T>
+struct S
+{
+ typedef T const (&type)();
+};
+
+void f()
+{
+ // initial implementation didn't ignore const qualifier on
+ // reference, resulting in a typedef of 'const int& (&)()'
+ same_type<S<int &>::type, int&(&)()>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse.C
new file mode 100644
index 0000000..b537bb5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/collapse.C
@@ -0,0 +1,38 @@
+// { dg-do compile { target c++11 } }
+template<typename T, typename U> struct same_type;
+template<typename T> struct same_type<T, T> {};
+
+typedef int & lref;
+typedef int const & clref;
+typedef int && rref;
+typedef int const && crref;
+
+template<typename T>
+struct S
+{
+ typedef T & lref;
+ typedef T const & clref;
+ typedef T && rref;
+ typedef T const && crref;
+};
+
+void f()
+{
+ same_type<lref &, int &>();
+ same_type<lref &&, int &>();
+ same_type<rref &, int &>();
+ same_type<rref &&, int &&>();
+
+ same_type<rref const &, int &>();
+ same_type<crref volatile &&, int const &&>();
+ same_type<clref const &&, int const &>();
+
+ same_type<S<int &>::lref &, int &>();
+ same_type<S<int &&>::lref &&, int &>();
+ same_type<S<int &>::rref &, int &>();
+ same_type<S<int &&>::rref &&, int &&>();
+
+ same_type<S<int const &>::rref, int const &>();
+ same_type<S<int volatile &&>::crref, int volatile &&>();
+ same_type<S<int const &&>::clref, int const &>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
new file mode 100644
index 0000000..746a84e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
@@ -0,0 +1,14 @@
+// PR c++/46336
+// { dg-do compile { target c++11 } }
+
+extern "C" {
+ enum A { };
+ inline constexpr A
+ f(A a, A b) // { dg-message "previous declaration" }
+ { return A(static_cast<int>(a) & static_cast<int>(b)); }
+ enum B { };
+ inline constexpr B
+ f(B a, B b) // { dg-error "C function" }
+ { return B(static_cast<int>(a) & static_cast<int>(b)); }
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C
new file mode 100644
index 0000000..17a366e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-46420.C
@@ -0,0 +1,13 @@
+// PR c++/46420
+// { dg-do compile { target c++11 } }
+
+template<typename> class vector { };
+struct A{};
+template <class T1>
+void complete_test(vector<T1> data1){
+ A drop=A();
+}
+int main(){
+ vector<double> vect1;
+ complete_test(vect1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C
new file mode 100644
index 0000000..263a44b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C
@@ -0,0 +1,25 @@
+// PR c++/47570
+// { dg-do compile { target c++11 } }
+
+unsigned int constexpr one()
+{ return 1; }
+
+int constexpr one_B()
+{ return 1; }
+
+int main()
+{
+ // FAIL TO COMPILE:
+ static bool constexpr SC_huh1 = ((unsigned int)one()) >= ((unsigned int)0);
+ static bool constexpr SC_huh2 = one() >= ((unsigned int)0);
+ static bool constexpr SC_huh3 = one() >= 0;
+
+ // COMPILE OK:
+ static bool constexpr SC_huh4 = ((one() == 0) || (one() > 0));
+ static bool constexpr SC_huh5 = one() == 0;
+ static bool constexpr SC_huh6 = one() > 0;
+ static bool constexpr SC_huh7 = one_B() >= 0;
+ static bool constexpr SC_huh8 = one() >= 1;
+
+ return SC_huh3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C
new file mode 100644
index 0000000..933831b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C
@@ -0,0 +1,11 @@
+// PR c++/47969
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ // constexpr operator int () { return 1; }
+};
+
+constexpr A a = A();
+
+int ar[a]; // { dg-error "has non-integral type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
new file mode 100644
index 0000000..88d4426
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
@@ -0,0 +1,50 @@
+// PR c++/48089
+// { dg-do compile { target c++11 } }
+
+// bang is ill-formed (diagnostic required) because its initializer is
+// non-constant, because it uses the value of an uninitialized object.
+
+// s() is ill-formed (no diagnostic required) because there is no set of
+// arguments that would produce a constant expression.
+
+// R() is well-formed because i is initialized before j.
+
+struct s {
+ constexpr s() : v(v) { } // { dg-message "" }
+ int v;
+};
+
+constexpr s bang; // { dg-message "" }
+
+struct R {
+ int i,j;
+ constexpr R() : i(42),j(i) { } // { dg-bogus "" "" { xfail *-*-* } }
+};
+
+constexpr R r; // { dg-bogus "" "" { xfail *-*-* } }
+
+// Ill-formed (no diagnostic required)
+struct T {
+ int i;
+ constexpr int f() { return i; }
+ constexpr T(): i(0) { }
+ constexpr T(const T& t) : i(f()) { } // { dg-message "" }
+};
+
+constexpr T t1;
+// Ill-formed (diagnostic required)
+constexpr T t2(t1); // { dg-message "" }
+
+// Well-formed
+struct U {
+ int i, j;
+ constexpr int f(int _i) { return _i; }
+ constexpr int g() { return i; }
+ constexpr U(): i(0), j(0) { }
+ constexpr U(const U& t) : i(f(t.i)),j(0) { } // { dg-bogus "" "" { xfail *-*-* } }
+ constexpr U(int _i) : i(_i),j(g()) { } // { dg-bogus "" "" { xfail *-*-* } }
+};
+
+constexpr U u1;
+constexpr U u2(u1); // { dg-bogus "" "" { xfail *-*-* } }
+constexpr U u3(1); // { dg-bogus "" "" { xfail *-*-* } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C
new file mode 100644
index 0000000..c1d1c37
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C
@@ -0,0 +1,17 @@
+// PR c++/49776
+// { dg-do compile { target c++11 } }
+
+struct s
+{
+ int i[1];
+
+ template<class... Types>
+ constexpr s(Types... args)
+ : i{args...} // { dg-error "cannot convert" }
+ { }
+};
+
+int main()
+{
+ s test = nullptr;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C
new file mode 100644
index 0000000..413566f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C
@@ -0,0 +1,11 @@
+// PR c++/51369
+// { dg-do compile { target c++11 } }
+
+constexpr int x[2][2] = {};
+
+template<int>
+void
+foo ()
+{
+ x[0][0];
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
new file mode 100644
index 0000000..0ce07a5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
@@ -0,0 +1,7 @@
+// PR c++/52672
+// { dg-do compile { target c++11 } }
+
+__extension__ typedef __SIZE_TYPE__ * ul_ptr;
+constexpr unsigned long a = *((ul_ptr)0x0); // { dg-error "" }
+constexpr unsigned long b = *((ul_ptr)(*((ul_ptr)0x0))); // { dg-error "" }
+constexpr unsigned long c = *((ul_ptr)*((ul_ptr)(*((ul_ptr)0x0)))); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C
new file mode 100644
index 0000000..c90fc76
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-1.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
+constexpr V4 v = { 1, 1, 1, 0 };
+constexpr V4 r = v[0] + v;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
new file mode 100644
index 0000000..f34619a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+// Ignore warning on some powerpc-ibm-aix configurations.
+// { dg-prune-output "non-standard ABI extension" }
+// { dg-prune-output "changes the ABI" }
+
+typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
+constexpr V4 build (float x, float y, float z) { return __extension__ (V4){ x, y, z, 0 };}
+constexpr V4 x = build (1, 0, 0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-3.C
new file mode 100644
index 0000000..58c00ed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-3.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+// Ignore warning on some powerpc-ibm-aix configurations.
+// { dg-prune-output "non-standard ABI extension" }
+
+typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
+
+struct Rot3 {
+ typedef float T;
+ typedef V4 Vec;
+ Vec axis[3];
+ constexpr Rot3 (V4 ix, V4 iy, V4 iz) : axis {ix, iy, iz} {}
+
+ constexpr Rot3(T xx, T xy, T xz, T yx, T yy, T yz, T zx, T zy, T zz) :
+ Rot3((Vec) { xx, xy, xz, 0 },
+ (Vec) { yx, yy, yz, 0 },
+ (Vec) { zx, zy, zz, 0 }) {}
+
+};
+
+constexpr Rot3 r1( 0, 1 ,0, 0, 0, 1, 1, 0, 0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55432.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55432.C
new file mode 100644
index 0000000..56b09bd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55432.C
@@ -0,0 +1,22 @@
+// PR c++/55432
+// { dg-do compile { target c++11 } }
+
+struct tag_t{} tag{};
+
+constexpr tag_t const& pass(tag_t & t)
+{
+ return t;
+}
+
+struct S
+{
+ constexpr S(tag_t) {};
+};
+
+struct T
+{
+ S mem;
+ T( tag_t & args ) : mem(pass(args)) {}
+};
+
+T t(tag);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C
new file mode 100644
index 0000000..bec69c7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55573.C
@@ -0,0 +1,24 @@
+// PR c++/55573
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+// Ignore warning on some powerpc-ibm-aix configurations.
+// { dg-prune-output "non-standard ABI extension" }
+
+template <typename T, int N>
+struct ExtVecTraits {
+ typedef T __attribute__((vector_size (N * sizeof (T)))) type;
+};
+
+template <typename T>
+using Vec4 = typename ExtVecTraits<T,4>::type;
+
+template <typename T>
+struct Rot3
+{
+ typedef Vec4<T> Vec;
+ Vec axis[3];
+ constexpr Rot3 (Vec4<T> ix, Vec4<T> iy, Vec4<T> iz) : axis {ix, iy, iz} {}
+};
+
+typedef Vec4<float> Vec;
+Rot3<float> r2 ((Vec) {0, 1, 0, 0}, (Vec){0, 0, 1, 0}, (Vec){1, 0, 0, 0});
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55708.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55708.C
new file mode 100644
index 0000000..ffbefbb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-55708.C
@@ -0,0 +1,30 @@
+// PR c++/55708
+// { dg-do compile { target c++11 } }
+
+template<int N,int NNN>
+struct AA { static constexpr int val = N; };
+
+template<typename A,typename B>
+//constexpr unsigned long long mymax(A a,B b){ // <-- compiles
+constexpr unsigned long long mymax(A && a,const B& b){
+ return a<b?b:a;
+}
+
+template<char... List>
+constexpr long long operator"" _y() noexcept
+{
+ return AA<1, mymax(1,2)>::val; // <-- crashes gcc
+ // return mymax(1,2); // <-- compiles
+ // return AA<1,2>::val; // <-- compiles
+}
+
+template<char... List>
+constexpr unsigned long long do_y() noexcept
+{
+ return AA<1, mymax(1,2)>::val; // <-- crashes gcc
+}
+
+int main()
+{
+ return 1_y + do_y();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-56302.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-56302.C
new file mode 100644
index 0000000..945bf02
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-56302.C
@@ -0,0 +1,12 @@
+// PR c++/56302
+// { dg-do compile { target c++11 } }
+// { dg-options "-O0" }
+
+constexpr int foo () { return 42; }
+constexpr int x = foo () + 2;
+
+void
+bar ()
+{
+ __asm ("" : : "n" (x), "n" (foo () * 7 + x));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
new file mode 100644
index 0000000..1a0189b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
@@ -0,0 +1,4 @@
+// { dg-options "-std=c++98" }
+
+constexpr int i = 42; // { dg-message "std=c\\+\\+11" }
+// { dg-error "constexpr" "" { target *-*-* } 3 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
new file mode 100644
index 0000000..8d791dd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
@@ -0,0 +1,13 @@
+// Origin PR c++/51462
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i = 0;
+};
+
+struct B
+{
+ A a;
+ constexpr B() : a(0) {} // { dg-error "no matching function" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C
new file mode 100644
index 0000000..418a202
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C
@@ -0,0 +1,17 @@
+// PR c++/47301
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=1" }
+
+struct A
+{
+ constexpr operator int ()
+ {
+ return 1;
+ }
+};
+
+template < int > struct B
+{
+ static constexpr A a = A();
+ int ar[a];
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-access.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-access.C
new file mode 100644
index 0000000..569824d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-access.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+class base
+{
+protected:
+ constexpr base() { }
+};
+
+struct A : base { };
+
+int main()
+{
+ A a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-and.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-and.C
new file mode 100644
index 0000000..ea86d7b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-and.C
@@ -0,0 +1,20 @@
+// PR c++/56481
+// Non-linearity in potential_constant_expression_1
+// { dg-do compile { target c++11 } }
+
+struct S
+{
+ constexpr bool foo ();
+#define A(n) , f##n##0, f##n##1, f##n##2, f##n##3
+#define B(n) A(n##0) A(n##1) A(n##2) A(n##3)
+#define C B(0) B(1) B(2) B(3)
+ bool f C;
+};
+
+constexpr bool
+S::foo ()
+{
+#undef A
+#define A(n) && f##n##0 && f##n##1 && f##n##2 && f##n##3
+ return f C;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C
new file mode 100644
index 0000000..15d20f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+constexpr T do_get(T* x, int n) {
+ return x[n - 1];
+}
+
+template<class T, int N>
+constexpr T get(T (&x)[N]) {
+ return do_get(x, N);
+}
+
+constexpr int arr_i[] = {1};
+constexpr auto var = get(arr_i); // #2
+static_assert(var == arr_i[0], "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C
new file mode 100644
index 0000000..9218196
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr2.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct IsNegative {
+ int dummy; // Workaround for empty class problem
+ constexpr IsNegative() : dummy(0) {}
+ constexpr bool operator()(const T& x) {
+ return x < T(0);
+ }
+};
+
+template<class T, int N, class Pred>
+constexpr bool has_neg(T (&x)[N], Pred p) {
+ return p(x[0]) || p(x[1]);
+}
+
+constexpr int a[] = {1, -2};
+
+constexpr auto answer = has_neg(a, IsNegative<int>{}); // #1
+
+static_assert(answer, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr3.C
new file mode 100644
index 0000000..2338f70
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr3.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+constexpr bool is_negative(int x) {
+ return x < 0;
+}
+
+constexpr bool do_has_neg(const int* x, bool(*p)(int)) {
+ return p(x[0]) || p(x[1]); // Line 6
+}
+
+constexpr bool has_neg(const int (&x)[2], bool(*p)(int)) {
+ return do_has_neg(x, p); // Line 10
+}
+
+constexpr int a[] = {1, -2};
+
+constexpr auto answer = has_neg(a, is_negative); // Line 15
+
+static_assert(answer, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr4.C
new file mode 100644
index 0000000..3dd3f34
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr4.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+
+constexpr const int do_last(const int* x, int n) {
+ return x[n - 1];
+}
+
+struct IsNegative {
+ constexpr bool operator()(const int& x) {
+ return x < 0;
+ }
+};
+
+template<int N, class Pred>
+constexpr bool has_neg(const int (&x)[N], Pred p) {
+ return p(do_last(x, N)); // Line 13
+}
+
+constexpr int a[] = {1, -2};
+
+constexpr auto answer = has_neg(a, IsNegative{}); // Line 18
+
+static_assert(answer, "Error");
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr5.C
new file mode 100644
index 0000000..eec32d6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr5.C
@@ -0,0 +1,32 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+constexpr T do_last(T* x, int n) {
+ return x[n - 1]; //
+}
+
+template<class T, int N>
+constexpr T last(T (&x)[N]) {
+ return do_last(x, N);
+}
+
+constexpr bool is_negative(int x) { return x < 0; }
+
+template<class T>
+struct IsNegative {
+ constexpr bool operator()(const T& x) {
+ return x < T(0);
+ }
+};
+
+template<class T, int N, class Pred>
+constexpr bool has_neg(T (&x)[N], Pred p) {
+ return p(last(x)); // Line 22
+}
+
+constexpr int a[] = {1, -2};
+
+constexpr auto answer1 = has_neg(a, IsNegative<int>{}); // Line 27
+constexpr auto answer2 = has_neg(a, is_negative);
+
+static_assert(answer2 == answer1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr6.C
new file mode 100644
index 0000000..3a48398
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr6.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+
+typedef decltype(sizeof(char)) size_type;
+
+template<class T, size_type N>
+constexpr size_type size(T (&)[N]) { return N; }
+
+double array_double[] = { 1.0, 2.0, 3.0 };
+
+constexpr auto sz_d = size(array_double);
+
+static_assert(sz_d == 3, "Array size failure");
+
+void f(bool (&param)[2]) {
+ static_assert(size(param) == 2, "Array size failure"); // Line 13
+ short data[] = {-1, 2, -45, 6, 88, 99, -345};
+ static_assert(size(data) == 7, "Array size failure");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C
new file mode 100644
index 0000000..93f9141
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C
@@ -0,0 +1,20 @@
+// PR c++/49290
+// { dg-do compile { target c++11 } }
+
+typedef unsigned T;
+struct S
+{
+ constexpr T foo (void);
+ unsigned s1[16];
+};
+
+constexpr T
+S::foo ()
+{
+ return *(T *) (s1 + 10);
+}
+
+constexpr S s = { 0,1,2,3,4,5,6,7,8,9,10 };
+
+#define SA(X) static_assert ((X), #X)
+SA(s.foo() == 10);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
new file mode 100644
index 0000000..ee425ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
@@ -0,0 +1,54 @@
+// PR c++/57047
+// { dg-require-effective-target c++11 }
+
+template <typename>
+struct A;
+template <typename T>
+struct A <T &>
+{
+ typedef T type;
+};
+template <typename T>
+constexpr T && foo (typename A <T>::type & __t) noexcept
+{
+ return static_cast <T &&>(__t);
+}
+template <class T1, class T2>
+struct B
+{
+ T1 t1;
+ T2 t2;
+ template <class U>
+ constexpr B (U && __x, const T2 & __y) : t1 (foo <U> (__x)), t2 (__y) {}
+};
+static inline constexpr bool
+fn1 (const char c)
+{
+ return ('0' <= c) && (c <= '9');
+}
+static inline constexpr bool
+fn2 (const char c)
+{
+ return (('A' <= c) && (c <= 'Z')) || (('a' <= c) && (c <= 'z'));
+}
+static constexpr bool
+fn3 (const char *const x)
+{
+ return (x[1] == '\0' && x[0] == ']') ? true : (!fn1 (x[0])) ? false : fn3 (&x[1]);
+}
+static constexpr bool
+fn4 (const char *const x)
+{
+ return (x[0] == '\0') ? fn3 (&x[1]) : fn4 (&x[1]);
+}
+static inline constexpr bool
+fn5 (const char *const x)
+{
+ return fn2 (x[0]) ? fn4 (x) : false;
+}
+struct C final
+{
+ constexpr C (const char *const t1) : c (fn5 (t1) ? 199 : 69) {}
+ unsigned c;
+};
+B <C, C> p ("a", "b");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-tparm.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-tparm.C
new file mode 100644
index 0000000..02fba95
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array-tparm.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+template <const int I[2]> struct A { int ir[I[0]]; };
+extern constexpr int ar[2] = { 1, 2 };
+A<ar> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array.C
new file mode 100644
index 0000000..1614d6b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler-not "static_initialization" } }
+
+struct A
+{
+ int i;
+ constexpr A(): i(0) { }
+};
+
+struct B
+{
+ A a[4];
+};
+
+extern const B b{};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array2.C
new file mode 100644
index 0000000..ad6b121
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array2.C
@@ -0,0 +1,19 @@
+// PR c++/46348
+// { dg-do compile { target c++11 } }
+
+template<__SIZE_TYPE__ _Nw>
+ struct _Base
+ {
+ typedef unsigned long _WordT;
+
+ _WordT _M_w[_Nw];
+
+ constexpr
+ _Base()
+ : _M_w() { }
+ };
+
+int main()
+{
+ _Base<256> bs;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
new file mode 100644
index 0000000..12f42f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
@@ -0,0 +1,14 @@
+// PR c++/48132
+// { dg-do compile { target c++11 } }
+
+struct C
+{
+ constexpr C (int x) : c (x) {}
+ int c;
+};
+
+void
+foo ()
+{
+ C a[] = { C (0) };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
new file mode 100644
index 0000000..aa95264
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
@@ -0,0 +1,14 @@
+// PR c++/49924
+// { dg-do compile { target c++11 } }
+
+struct A { constexpr A() { } };
+
+struct B {
+ A array[1]; //non-static member array of a literal type w constexpr ctor
+ constexpr B() : array{} { } // here is the problem
+};
+
+int main()
+{
+ constexpr B b{}; // won't compile
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
new file mode 100644
index 0000000..4605b4b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
@@ -0,0 +1,9 @@
+// PR c++/56582
+// { dg-do compile { target c++11 } }
+
+// Reliable ICE
+constexpr int n[3] = {};
+constexpr int k = n[-1]; // { dg-error "negative" }
+
+// Some random byte
+constexpr char c = "foo"[-1000]; // { dg-error "negative" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C
new file mode 100644
index 0000000..cda0e92
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C
@@ -0,0 +1,63 @@
+// { dg-do compile { target c++11 } }
+
+//A few constexpr's
+constexpr int foo() { return __alignof__(int); }
+
+template<typename T>
+constexpr int fooT() { return __alignof__(T); }
+
+template<int N>
+constexpr int fooN() { return N; }
+
+//Now the attributes
+
+//with normal variables,
+int a __attribute__((aligned(foo())));
+int b __attribute__((aligned(fooT<int>())));
+int c __attribute__((aligned(fooN<__alignof__(int)>())));
+
+//with variables inside a template,
+template <typename T>
+void fun()
+{
+ T a __attribute__((aligned(foo())));
+ T b __attribute__((aligned(fooT<T>())));
+ T c __attribute__((aligned(fooN<__alignof__(T)>())));
+ T d __attribute__((aligned(fooT<int>())));
+ T e __attribute__((aligned(fooN<__alignof__(int)>())));
+}
+
+//instantiate it,
+void bar()
+{
+ fun<int>();
+}
+
+//with classes
+struct __attribute__((aligned(foo()))) S0
+{
+ char dummy;
+};
+S0 s0;
+
+struct __attribute__((aligned(fooT<int>()))) S1
+{
+ char dummy;
+};
+S1 s1;
+
+//and class templates
+template <typename T>
+struct __attribute__((aligned(foo()))) S2
+{
+ char dummy;
+};
+
+S2<int> s2;
+
+template <typename T>
+struct __attribute__((aligned(fooT<T>()))) S3
+{
+ char dummy;
+};
+S3<int> s3;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute2.C
new file mode 100644
index 0000000..c174cb3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute2.C
@@ -0,0 +1,33 @@
+// { dg-do compile { target init_priority } }
+// { dg-require-effective-target c++11 }
+
+struct t { t(); };
+
+constexpr int prio = 123;
+constexpr int size = 8;
+constexpr int pos = 1;
+enum A { zero = 0, one, two };
+__attribute__((init_priority(prio))) t a;
+
+enum class E1 : int {
+ first = 101,
+ second,
+ third,
+};
+__attribute__((init_priority(E1::second))) t b; // Should not compile?
+
+enum E2 {
+ E2_first = 141,
+ E2_second,
+ E2_third,
+};
+__attribute__((init_priority(E2_second))) t c;
+
+void* my_calloc(unsigned, unsigned) __attribute__((alloc_size(pos,two)));
+void* my_realloc(void*, unsigned) __attribute__((alloc_size(two)));
+
+typedef char vec __attribute__((vector_size(size)));
+
+void f(char*) __attribute__((nonnull(pos)));
+
+char g __attribute__((aligned(size)));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-auto.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-auto.C
new file mode 100644
index 0000000..ae270dc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-auto.C
@@ -0,0 +1,2 @@
+// { dg-do compile { target c++11 } }
+constexpr auto value = 0;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base.C
new file mode 100644
index 0000000..5f0b5ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base.C
@@ -0,0 +1,17 @@
+// Test base/member class and static_assert with constexpr
+// { dg-do compile { target c++11 } }
+
+struct A {
+ int i;
+ constexpr A(int _i): i(_i) { }
+};
+struct B: A {
+ A a;
+ int j;
+ constexpr B(int _ib, int _ia, int _j): A(_ib), a(_ia), j(_j) { }
+};
+
+constexpr B b (12, 24, 36);
+
+#define SA(X) static_assert (X, #X)
+SA(b.i==12 && b.a.i==24 && b.j==36);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base2.C
new file mode 100644
index 0000000..217687a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base2.C
@@ -0,0 +1,19 @@
+// PR c++/46293
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+};
+
+struct C
+{
+ int i;
+ constexpr C(int i): i(i) {}
+};
+
+struct B: A, C
+{
+ constexpr B(): A(), C(42) { }
+};
+
+constexpr B b{};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C
new file mode 100644
index 0000000..db867d4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base3.C
@@ -0,0 +1,26 @@
+// PR c++/46526
+// { dg-do run { target c++11 } }
+
+struct Base
+{
+ virtual int getid () = 0;
+};
+
+struct A : public Base
+{
+ virtual int getid () { return 1; }
+};
+
+struct B : public Base
+{
+ virtual int getid () { throw "here"; }
+};
+
+int
+main ()
+{
+ A a;
+ B b;
+ Base& ar = a;
+ ar.getid ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base4.C
new file mode 100644
index 0000000..ab66439
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-base4.C
@@ -0,0 +1,27 @@
+// PR c++/46626
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ virtual void f () = 0;
+ virtual ~A () { }
+};
+
+struct B : A
+{
+ virtual void f () { }
+};
+
+static void
+foo (A *a)
+{
+ a->f ();
+}
+
+int
+main ()
+{
+ B b;
+ foo (&b);
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield.C
new file mode 100644
index 0000000..a50ac36
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield.C
@@ -0,0 +1,10 @@
+// PR c++/46369
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ unsigned i : 1;
+};
+
+constexpr A f() { return { 1 }; }
+constexpr bool b = (f().i == 1);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield2.C
new file mode 100644
index 0000000..5b66720
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield2.C
@@ -0,0 +1,18 @@
+// PR c++/49136
+// { dg-do compile { target c++11 } }
+
+struct day
+{
+ unsigned d : 5;
+ unsigned n : 3;
+ constexpr explicit day (int dd) : d(dd), n(7) {}
+};
+
+struct date {
+ int d;
+ constexpr date (day dd) : d(dd.n != 7 ? 7 : dd.d) {}
+};
+
+constexpr day d(0);
+constexpr date dt(d);
+static_assert (dt.d == 0, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C
new file mode 100644
index 0000000..c393db4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C
@@ -0,0 +1,32 @@
+// PR c++/49136
+// { dg-do compile { target c++11 } }
+
+struct S
+{
+ unsigned : 1; unsigned s : 27; unsigned : 4;
+ constexpr S (unsigned int x) : s(x) {}
+};
+
+template <typename S>
+struct T
+{
+ unsigned int t;
+ constexpr T (S s) : t(s.s != 7 ? 0 : s.s) {}
+ constexpr T (S s, S s2) : t(s.s != s2.s ? 0 : s.s) {}
+};
+
+constexpr S s (7), s2 (7);
+constexpr T<S> t (s), t2 (s, s2);
+static_assert (t.t == 7, "Error");
+static_assert (t2.t == 7, "Error");
+
+struct U
+{
+ int a : 1; int s : 1;
+ constexpr U (int x, int y) : a (x), s (y) {}
+};
+
+constexpr U u (0, -1), u2 (-1, -1);
+constexpr T<U> t3 (u), t4 (u, u2);
+static_assert (t3.t == 0, "Error");
+static_assert (t4.t == -1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C
new file mode 100644
index 0000000..d663f88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C
@@ -0,0 +1,25 @@
+// PR c++/49813
+// { dg-do compile { target c++11 } }
+
+inline constexpr bool
+isinf(long double __x)
+{ return __builtin_isinf(__x); }
+
+inline constexpr bool
+isinf(double __x)
+{ return __builtin_isinf(__x); }
+
+inline constexpr bool
+isnan(long double __x)
+{ return __builtin_isnan(__x); }
+
+int main()
+{
+ constexpr long double num1 = __builtin_isinf(1.l); // Ok.
+
+ constexpr long double num2 = isinf(1.l); // Error.
+
+ constexpr double num3 = isinf(1.); // Ok.
+
+ constexpr long double num4 = isnan(1.l); // Ok.
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin2.C
new file mode 100644
index 0000000..dde38f0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin2.C
@@ -0,0 +1,16 @@
+// PR c++/54021
+// { dg-do compile { target c++11 } }
+
+extern int nonconst_func(int);
+constexpr int identity(int x) { return x; }
+constexpr int zero() { return identity(0); }
+constexpr int one() { return identity(1); }
+
+// These are the same. Only the latter is accepted, though.
+constexpr int rejected_const_4(int x)
+{ return __builtin_constant_p(x) ? 4 : nonconst_func(x); }
+constexpr int accepted_const_4(int x)
+{ return identity(__builtin_constant_p(x)) ? 4 : nonconst_func(x); }
+
+// This is rejected. I would like it to work.
+constexpr int four = accepted_const_4(1);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C
new file mode 100644
index 0000000..8038b88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C
@@ -0,0 +1,9 @@
+// PR c++/51433
+// { dg-do compile { target c++11 } }
+
+constexpr int f();
+constexpr int g() { return f(); }
+extern const int n = g(); // dynamic initialization
+constexpr int f() { return 42; }
+extern const int m = g();
+static_assert(m == 42, "m == 42");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cleanup.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cleanup.C
new file mode 100644
index 0000000..bfba6fc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-cleanup.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ ~A();
+};
+
+constexpr int i = A().i; // { dg-error "non-literal" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-complex.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-complex.C
new file mode 100644
index 0000000..fa39348
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-complex.C
@@ -0,0 +1,18 @@
+// Make sure C99 complex works with constexpr
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+struct complex
+{
+ typedef float value_type;
+ typedef __complex__ float _ComplexT;
+
+ constexpr complex(_ComplexT __z) : _M_value(__z) { }
+
+ constexpr complex(float __r = 0.0f, float __i = 0.0f)
+ : _M_value(__r + __i * 1.0fi) { }
+
+private:
+ _ComplexT _M_value;
+};
+constexpr complex c1;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C
new file mode 100644
index 0000000..bfe4e13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+constexpr int f()
+{
+ { // { dg-error "" }
+ return 1;
+ }
+ { } // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C
new file mode 100644
index 0000000..388a734
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+// Core DR 948
+
+constexpr int something() { return 3; }
+
+int main() {
+ if (constexpr long v = something()) {}
+ if (static long v = something()) { } // { dg-error "decl-specifier invalid" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C
new file mode 100644
index 0000000..3ce9b4c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C
@@ -0,0 +1,18 @@
+// PR c++/48909
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert((X),#X)
+
+constexpr int const * is_sorted_until(int const * first, int const * last)
+{
+ return first == last || first + 1 == last ? last
+ : (*(first + 1) < *first) != false ? first + 1
+ : is_sorted_until(first + 1, last);
+}
+
+int main()
+{
+ static constexpr int array[2] = {0, 1};
+ constexpr int const * last = is_sorted_until(array, array + 2);
+ SA(last==array+2);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C
new file mode 100644
index 0000000..6ee7225
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C
@@ -0,0 +1,7 @@
+// PR c++/54086
+// { dg-do compile { target c++11 } }
+
+static constexpr const char Data[] = {
+ 'D', 'A', 'T', 'A',
+};
+static constexpr const char *data_func() { return Data; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor.C
new file mode 100644
index 0000000..659e733
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ constexpr A() { } // { dg-error "uninitialized member .A::i" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C
new file mode 100644
index 0000000..1dbc335
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C
@@ -0,0 +1,6 @@
+// PR c++/52599
+// { dg-do compile { target c++11 } }
+
+struct foo {
+ constexpr foo() try { } catch(...) { }; // { dg-error "constexpr" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C
new file mode 100644
index 0000000..e22c55f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C
@@ -0,0 +1,16 @@
+// PR c++/55856
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(const char *);
+};
+
+template <class T>
+struct B
+{
+ T t;
+ template <class U> constexpr B(U&& u): t(u) { }
+};
+
+B<A&&> b("");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C
new file mode 100644
index 0000000..45e1ed2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C
@@ -0,0 +1,14 @@
+// PR c++/55753
+// { dg-do compile { target c++11 } }
+
+template <typename Tp>
+struct C {
+ constexpr C(const Tp& r) { }
+};
+
+template <typename Tp>
+struct B {
+ B() {
+ C<double> cpl = C<double>((true ? 1.0 : C<double>()));
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor13.C
new file mode 100644
index 0000000..299db88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor13.C
@@ -0,0 +1,15 @@
+// PR c++/55753
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ double r,i;
+ constexpr A(double r = 0.0, double i = 0.0): r(r), i(i) {}
+};
+
+template <typename Tp>
+struct B {
+ B() {
+ A((true ? 1.0 : A()));
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor2.C
new file mode 100644
index 0000000..30b0109
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor2.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+};
+
+struct B : A
+{
+ constexpr B(): A() { } // { dg-error "A::A" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor3.C
new file mode 100644
index 0000000..36d1de4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor3.C
@@ -0,0 +1,10 @@
+// PR c++/46348
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int arr[1];
+
+ constexpr A()
+ : arr() { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor4.C
new file mode 100644
index 0000000..c494712
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor4.C
@@ -0,0 +1,15 @@
+// PR c++/46873
+// { dg-do compile { target c++11 } }
+
+struct S
+{
+ int i:1;
+};
+
+struct T
+{
+ const S s;
+ constexpr T (S a = S ()) : s (a) { }
+};
+
+T t;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor5.C
new file mode 100644
index 0000000..abfc72c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor5.C
@@ -0,0 +1,30 @@
+// PR c++/46877
+// { dg-do compile { target c++11 } }
+
+struct new_allocator
+{
+ constexpr new_allocator ();
+};
+
+struct string
+{
+ constexpr string ()
+ {
+ }
+ new_allocator a;
+};
+
+struct pair
+{
+ const string first;
+ constexpr pair ()
+ {
+ }
+};
+
+constexpr
+new_allocator::new_allocator ()
+{
+}
+
+pair p;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor6.C
new file mode 100644
index 0000000..fd87fe4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor6.C
@@ -0,0 +1,10 @@
+// PR c++/47041
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-elide-constructors" }
+
+struct S
+{
+ int i;
+};
+
+S s = S ();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor7.C
new file mode 100644
index 0000000..5d18e56
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor7.C
@@ -0,0 +1,18 @@
+// PR c++/47199
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-elide-constructors" }
+
+template < int > struct S
+{
+ constexpr S (int r):rr (r)
+ {
+ }
+ S (const S &) = default;
+ static constexpr S s ()
+ {
+ return -1;
+ }
+ int rr;
+};
+
+static const int d = S < 0 >::s ().rr;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor8.C
new file mode 100644
index 0000000..5b75e64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor8.C
@@ -0,0 +1,7 @@
+// PR c++/46466
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-elide-constructors" }
+
+struct S { bool b; };
+constexpr S f() { return S{true}; }
+static_assert(f().b, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor9.C
new file mode 100644
index 0000000..0763ee4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor9.C
@@ -0,0 +1,19 @@
+// PR c++/47774
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A() {}
+};
+
+template <typename T>
+struct array
+{
+ constexpr array() : mem() {}
+ T mem[7];
+};
+
+int main()
+{
+ array<A> ar;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data1.C
new file mode 100644
index 0000000..f49c56a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data1.C
@@ -0,0 +1,42 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+// 1
+struct A2
+{
+ static const int eights = 888;
+ static constexpr int nines = 999;
+};
+
+A2 a;
+
+// 2
+struct pixel
+{
+ int x, y;
+};
+constexpr pixel ur = { 1294, 1024 }; // OK
+
+// p4
+struct Length
+{
+ explicit constexpr Length(int i = 0) : val(i) { }
+private:
+ int val;
+};
+
+constexpr int myabs(int x)
+{ return x < 0 ? -x : x; } // OK
+
+Length l(myabs(-97)); // OK
+
+// p6
+class debug_flag
+{
+public:
+ explicit debug_flag(bool);
+ constexpr bool is_on(); // { dg-error "enclosing class .* not a literal type" }
+private:
+ bool flag;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C
new file mode 100644
index 0000000..312760a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C
@@ -0,0 +1,46 @@
+// { dg-do compile { target c++11 } }
+
+template<typename _Tp, _Tp v>
+ struct A3
+ {
+ typedef _Tp value_type;
+ typedef A3<value_type,v> type;
+
+ static constexpr value_type value = v;
+
+ constexpr operator value_type() { return value; }
+ };
+
+// Partial specialization.
+template<typename _Tp, _Tp v>
+ struct A3<_Tp*, v>
+ {
+ typedef _Tp* value_type;
+ typedef A3<value_type,v> type;
+
+ static constexpr value_type value = v;
+
+ constexpr operator value_type() { return value; }
+ };
+
+// Explicit specialization.
+template<>
+ struct A3<unsigned short, 0>
+ {
+ typedef unsigned short value_type;
+ typedef A3<value_type, 0> type;
+
+ static constexpr value_type value = 0;
+
+ constexpr operator value_type() { return value; }
+ };
+
+// Explicitly instantiate.
+template struct A3<int, 415>;
+
+// Extern explicitly instantiate.
+extern template struct A3<int, 510>;
+
+// Use.
+A3<int, 1111> a31;
+A3<char, 9999> a32; // { dg-warning "overflow" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C
new file mode 100644
index 0000000..2c88fe6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C
@@ -0,0 +1,9 @@
+// PR c++/46930
+// { dg-do compile { target c++11 } }
+
+struct S {
+ static constexpr int size; // { dg-error "must have an initializer" "must have" }
+};
+
+const int limit = 2 * S::size;
+constexpr int S::size = 256;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg.C
new file mode 100644
index 0000000..eaa3fbd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg.C
@@ -0,0 +1,12 @@
+// PR c++/46335
+// { dg-do compile { target c++11 } }
+
+struct T { };
+struct A {
+ A(const T &tr =T()) {}
+};
+struct B {
+ A k;
+};
+B kk_;
+A fk_;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg2.C
new file mode 100644
index 0000000..f1ca05f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-defarg2.C
@@ -0,0 +1,44 @@
+// PR c++/46368
+// { dg-do compile { target c++11 } }
+
+class A;
+
+class B
+{
+ A foo ();
+ A bar ();
+};
+
+class C
+{
+};
+
+struct D
+{
+ D (C);
+};
+
+struct A : D
+{
+ A (const C & n) : D (n) {}
+};
+
+A baz (const char *, A = C ());
+
+A
+B::foo ()
+{
+ try
+ {
+ baz ("foo");
+ }
+ catch (...)
+ {
+ }
+}
+
+A
+B::bar ()
+{
+ baz ("bar");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C
new file mode 100644
index 0000000..a67505d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+struct A {
+ int i;
+ constexpr A():i(42) { };
+};
+struct B: A { };
+constexpr int f(B b) { return b.i; }
+
+struct C { C(); }; // { dg-message "calls non-constexpr" }
+struct D: C { }; // { dg-message "no constexpr constructor" }
+constexpr int g(D d) { return 42; } // { dg-error "invalid type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default1.C
new file mode 100644
index 0000000..68d50b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-default1.C
@@ -0,0 +1,22 @@
+// PR c++/53464
+// { dg-do compile { target c++11 } }
+
+template <int value>
+struct bar
+{
+ static constexpr int get()
+ {
+ return value;
+ }
+};
+
+template <typename A, int value = A::get()>
+struct foo
+{
+};
+
+int main()
+{
+ typedef foo<bar<0>> type;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C
new file mode 100644
index 0000000..f32dde6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C
@@ -0,0 +1,15 @@
+// PR c++/51526
+// { dg-do compile { target c++11 } }
+
+const int j = 42;
+
+struct S {
+ int i;
+ constexpr S(int i) : i(i) {}
+ constexpr S() : S(j) {}
+};
+
+constexpr S s{};
+
+#define SA(X) static_assert((X),#X)
+SA(s.i == 42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C
new file mode 100644
index 0000000..3543942
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C
@@ -0,0 +1,28 @@
+// PR c++/51723
+// { dg-do compile { target c++11 } }
+
+template <int... V>
+struct A
+{
+ static constexpr int a[sizeof...(V)] = { V... };
+};
+
+template <int... V> constexpr int A<V...>::a[];
+
+struct B
+{
+ const int* const b;
+
+ template <unsigned int N>
+ constexpr B(const int(&b)[N])
+ : b(b)
+ { }
+
+ template <int... V>
+ constexpr B(A<V...>)
+ : B(A<V...>::a)
+ { }
+};
+
+constexpr B b1 = A<10, 20, 30>::a;
+constexpr B b2 = A<10, 20, 30>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delete.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delete.C
new file mode 100644
index 0000000..3cc4f55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-delete.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+
+constexpr bool never() = delete; // useless, but OK
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-deref.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-deref.C
new file mode 100644
index 0000000..ce898ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-deref.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ const int *p[2];
+};
+
+constexpr const int * f(const int *p) { return p; }
+
+int main()
+{
+ constexpr int i = 42;
+ constexpr int j = *&i; // OK
+ constexpr int k = *A{{&i}}.p[0]; // OK
+ constexpr int l = *f(&i); // OK
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
new file mode 100644
index 0000000..34cdb73
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
@@ -0,0 +1,20 @@
+// Test that we explain why a template instantiation isn't constexpr
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A
+{
+ T t;
+ constexpr int f() { return 42; } // { dg-error "enclosing class" }
+};
+
+struct B { B(); operator int(); };
+
+constexpr A<int> ai = { 42 };
+constexpr int i = ai.f();
+
+constexpr int b = A<B>().f(); // { dg-error "non-constexpr function" }
+
+template <class T>
+constexpr int f (T t) { return 42; } // { dg-error "parameter" }
+constexpr int x = f(B()); // { dg-error "constexpr" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag2.C
new file mode 100644
index 0000000..04db4b3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag2.C
@@ -0,0 +1,5 @@
+// PR c++/47207
+// { dg-do compile { target c++11 } }
+
+constexpr int X (X); // { dg-error "not usable" }
+// { dg-message "own initializer" "" { target *-*-* } 4 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
new file mode 100644
index 0000000..2a1897b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
@@ -0,0 +1,54 @@
+// PR c++/45923
+// { dg-do compile { target c++11 } }
+
+int f(int);
+
+template <class T>
+constexpr T g(T t) { return f(t); } // { dg-error "f.int" }
+
+int main()
+{
+ constexpr int i = g(1); // { dg-error "g.T" }
+}
+
+// --------------------
+
+struct complex // { dg-message "no constexpr constructor" }
+{
+ complex(double r, double i) : re(r), im(i) { }
+ constexpr double real() { return re; } // { dg-error "not a literal type" }
+ double imag() const { return im; }
+
+private:
+ double re;
+ double im;
+};
+
+constexpr complex co1(0, 1); // { dg-error "not literal" }
+constexpr double dd2 = co1.real(); // { dg-error "non-constexpr function" }
+
+// --------------------
+
+struct base // { dg-message "no constexpr constructor" }
+{
+ int _M_i;
+ base() : _M_i(5) { }
+};
+
+struct derived : public base // { dg-message "base class" }
+{
+ constexpr derived(): base() { } // { dg-error "non-constexpr function" }
+};
+
+constexpr derived obj; // { dg-error "not literal" }
+
+// --------------------
+
+struct Def
+{
+ int _M_i; // { dg-message "does not initialize" }
+
+ constexpr Def() = default; // { dg-error "implicit declaration is not constexpr" }
+};
+
+constexpr Def defobj; // { dg-error "uninitialized" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C
new file mode 100644
index 0000000..29f574d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C
@@ -0,0 +1,25 @@
+// Origin: PR c++/51633
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ ~A();
+};
+
+struct B
+{
+ A a;
+ constexpr B() {}
+};
+
+struct A1
+{
+ int a;
+ ~A1();
+};
+
+struct B1
+{
+ A1 a1;
+ constexpr B1() {} // { dg-error "uninitialized member" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C
new file mode 100644
index 0000000..c8043e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C
@@ -0,0 +1,48 @@
+// Origin: PR c++/51633
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr A() {}
+ ~A();
+};
+
+struct B
+{
+ A a;
+ A b;
+ A c;
+ constexpr B() {}
+};
+
+struct C
+{
+ A a;
+ constexpr C() {}
+};
+
+struct D
+{
+ constexpr D() { return;} // { dg-error "does not have empty body" }
+};
+
+struct D1
+{
+ A a;
+ constexpr D1() { return;} // { dg-error "does not have empty body" }
+};
+
+struct D2
+{
+ A a;
+ A b;
+ constexpr D2() { return;} // { dg-error "does not have empty body" }
+};
+
+struct D3
+{
+ A a;
+ A b;
+ A c;
+ constexpr D3() { return;} // { dg-error "does not have empty body" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-eh-spec.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-eh-spec.C
new file mode 100644
index 0000000..93224b0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-eh-spec.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<class T> class my_limits {
+public:
+ static constexpr T min() throw() { return T(); }
+ static constexpr T max() noexcept { return T(); }
+};
+
+constexpr double var_min = my_limits<double>::min(); // #1 OK
+constexpr double var_max = my_limits<double>::max(); // #2 Error
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis.C
new file mode 100644
index 0000000..8c0783c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+constexpr int ellipsis(...) { return 1; }
+
+constexpr int ellipsis_c = ellipsis(); // OK
+constexpr int ellipsis_c2 = ellipsis(42); // Internal error
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis2.C
new file mode 100644
index 0000000..b6a5323
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ellipsis2.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+ A(const A&);
+ bool empty();
+};
+
+constexpr int ellipsis(...) { return 1; }
+
+static_assert(ellipsis(A().empty()), "Error"); // { dg-error "non-constant condition|empty" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty.C
new file mode 100644
index 0000000..42f873b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+struct Empty {};
+
+constexpr bool f(Empty) { return true; }
+
+constexpr bool x(f(Empty{}));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty2.C
new file mode 100644
index 0000000..51f3f55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty2.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+struct IsLiteral {};
+
+constexpr IsLiteral bar(IsLiteral x) { return x; }
+
+constexpr auto xy = bar(IsLiteral()); // #1 Error, but should be OK
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty3.C
new file mode 100644
index 0000000..a9cd98f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty3.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct IsLiteral {};
+
+constexpr auto ab = IsLiteral();
+
+constexpr IsLiteral bar(IsLiteral x) { return x; }
+
+constexpr auto xy = bar(ab);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty4.C
new file mode 100644
index 0000000..f61aa69
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty4.C
@@ -0,0 +1,34 @@
+// { dg-do compile { target c++11 } }
+
+typedef decltype(sizeof(char)) size_type;
+
+template<class T, size_type N, class Pred>
+constexpr size_type do_find_if_or_stop(T (&x)[N], size_type i, Pred p);
+
+template<class T, size_type N, class Pred>
+constexpr size_type do_find_if(T (&x)[N], size_type i, Pred p) {
+ return p(x[i]) ? i : do_find_if_or_stop(x, i + 1, p); // line 8
+}
+
+template<class T, size_type N, class Pred>
+constexpr size_type do_find_if_or_stop(T (&x)[N], size_type i, Pred p) {
+ return i == N ? N : do_find_if(x, i, p);
+} // Line 14
+
+template<class T, size_type N, class Pred>
+constexpr size_type find_if(T (&x)[N], Pred p) {
+ return do_find_if(x, 0, p); // Line 18
+}
+
+constexpr long items_long[] = {1, 2, 3, 4, -5, 6, -7, 8};
+
+template<class T>
+struct IsNegative {
+ constexpr bool operator()(const T& x) {
+ return x < T(0);
+ }
+};
+
+constexpr auto pos1 = find_if(items_long, IsNegative<long>{}); // Line 30
+
+static_assert(pos1 == 4, "find_if failure");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty5.C
new file mode 100644
index 0000000..e74f5ba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty5.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+struct A { };
+struct B: A { };
+
+constexpr B b { };
+constexpr A a = b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty6.C
new file mode 100644
index 0000000..be9a6c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-empty6.C
@@ -0,0 +1,11 @@
+// PR c++/55993
+// { dg-do compile { target c++11 } }
+
+struct A {};
+struct B:A {};
+struct C:A {};
+struct D:B,C {};
+
+constexpr D d {};
+constexpr const C& e=d; // OK
+constexpr auto f=static_cast<const C&>(d); // FAIL
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
new file mode 100644
index 0000000..e541bf9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
@@ -0,0 +1,93 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+// 4.1 constant-expression functions
+// 1 examples
+
+
+
+
+
+// 2 defined before first use
+// NOTE: this is only needed in contexts that require a constant-expression
+struct S {
+ constexpr int twice();
+ constexpr int t(); // { dg-message "used but never defined" }
+private:
+ static constexpr int val = 7; // constexpr variable
+};
+
+constexpr int S::twice() { return val + val; }
+constexpr S s = { };
+int x1 = s.twice(); // ok
+int x2 = s.t(); // error: S::t() not defined
+constexpr int x2a = s.t(); // { dg-error "S::t" } error: S::t() not defined
+constexpr int ff(); // ok
+constexpr int gg(); // ok
+int x3 = ff(); // error: ff() not defined
+constexpr int x3a = ff(); // { dg-error "ff" } error: ff() not defined
+constexpr int ff() { return 1; } // too late
+constexpr int gg() { return 2; }
+int x4 = gg(); // ok
+
+
+// 4.2 const-expression data
+
+// 2
+// storage not allocated untill address taken
+constexpr double x = 9484.748;
+const double* p = &x; // the &x forces x into memory
+
+// 4.3 constant-expression constructors
+
+// 1
+struct complex {
+ constexpr complex(double r, double i) : re(r), im(i) { }
+ constexpr double real() { return re; }
+ constexpr double imag() { return im; }
+private:
+ double re;
+ double im;
+};
+constexpr complex I(0, 1); // OK -- literal complex
+
+
+// 2 invoked with non-const args
+double x5 = 1.0; // { dg-message "not declared .constexpr" }
+constexpr complex unit(x5, 0); // { dg-error "x5|argument" } error: x5 non-constant
+const complex one(x5, 0); // OK, ‘‘ordinary const’’ -- dynamic
+ // initialization
+constexpr double xx = I.real(); // OK
+complex z(2, 4); // OK -- ordinary variable
+
+// 3
+constexpr complex v[] = {
+ complex(0, 0), complex(1, 1), complex(2, 2)
+};
+constexpr double x6 = v[2].real(); // OK
+
+// 4
+ constexpr int i = 98;
+ typedef __INTPTR_TYPE__ intptr_t;
+ constexpr intptr_t ip = (intptr_t) &i; // { dg-error "constant" }
+
+// 4.3.2 copy-constructor
+constexpr complex operator+(complex z, complex w)
+{
+ return complex(z.real() + w.real(), z.imag() + w.imag()); // fine
+}
+constexpr complex I2 = I + I; // OK
+struct resource {
+ int id;
+ constexpr resource(int i) : id(i) { } // fine
+ resource(const resource& r) : id(r.id) // oops, not constexpr
+ {
+ //cout << id << " copied" << endl;
+ }
+};
+constexpr resource f(resource d)
+{ return d; } // { dg-error "non-constexpr" }
+constexpr resource d = f(9); // { dg-message "constexpr" }
+
+// 4.4 floating-point constant expressions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C
new file mode 100644
index 0000000..9e99d6d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex2.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+// 4.5.3 constant expressions
+
+// p 4
+struct A {
+ constexpr A(int i) : val(i) { }
+ constexpr operator int() { return val; }
+ constexpr operator long() { return -1; }
+private:
+ int val;
+};
+
+template<int I> struct X { static const int i = I; };
+constexpr A a = 42;
+
+X<a> x; // OK: unique conversion to int
+int ar[X<a>::i]; // also OK
+int ary[a]; // { dg-error "ambiguous|conversion|array" } ambiguous conversion
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
new file mode 100644
index 0000000..3e2685b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex3.C
@@ -0,0 +1,31 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-ftrack-macro-expansion=0" }
+
+#define SA(X) static_assert (X, #X)
+
+struct A
+{
+ int i;
+ constexpr A(int _i) { i = _i; } // { dg-error "empty body|uninitialized member" }
+};
+
+template <class T>
+struct B
+{
+ T t;
+ constexpr B(T _t): t(_t) { }
+};
+
+B<int> b(1); // { dg-message "not declared .constexpr" }
+SA(b.t==1); // { dg-error "non-constant condition|'b'" }
+constexpr B<int> b2(1);
+SA(b2.t==1);
+
+template <class T>
+constexpr T f(T a, T b)
+{
+ typedef T myT;
+ return a + b;
+}
+
+SA(f(1,2)==3);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C
new file mode 100644
index 0000000..7a9086c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ex4.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr A(int) { }
+ constexpr operator int() { return 1; };
+};
+
+template <class T>
+struct B
+{
+ static constexpr A a = A(1);
+ int ar[a];
+};
+
+B<int> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C
new file mode 100644
index 0000000..08a0fe0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-expinst.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+// Error: Explicit instantiation of a function template shall not use the
+// inline or constexpr specifiers
+template<class T> constexpr inline T bar(T x) { return x; }
+template constexpr inline float bar(float x); // { dg-error "specifier" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C
new file mode 100644
index 0000000..f5137b3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-explicit-inst.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+template<class T> constexpr inline T bar(T x) { return x; }
+
+template short bar(short x); // #EI
+
+constexpr auto yz = bar(0); // OK
+constexpr auto ab = bar(short()); // #1 Error, but should be OK
+constexpr auto mn = bar(short{}); // #2 Error, but should be OK
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-fnptr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-fnptr.C
new file mode 100644
index 0000000..2b08478
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-fnptr.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+constexpr bool is_negative(int x) { return x < 0; }
+
+constexpr bool check(int x, bool (*p)(int)) { return p(x); } // #1
+
+static_assert(check(-2, is_negative), "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend-2.C
new file mode 100644
index 0000000..36799b4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend-2.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T> void f(T);
+
+template <class T> class A {
+ friend constexpr void f<>(int); // { dg-error "'constexpr' is not allowed" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
new file mode 100644
index 0000000..55a2329
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
@@ -0,0 +1,23 @@
+// PR c++/48948
+// { dg-do compile { target c++11 } }
+
+struct A { A(); };
+
+struct B {
+ friend constexpr int f(B) { return 0; } // OK
+ friend constexpr int f(A) { return 0; } // { dg-error "constexpr" }
+};
+
+template <class T>
+struct C
+{
+ friend constexpr int f(C) { return 0; }
+ friend constexpr int g(C, A) { return 0; } // { dg-error "double" }
+ constexpr int m(C) { return 0; }
+ constexpr int m(A) { return 0; } // { dg-error "double" }
+};
+
+constexpr int i = f(C<int>());
+constexpr int j = C<int>().m(C<int>());
+constexpr int k = C<double>().m(A()); // { dg-error "constexpr" }
+constexpr int l = g(C<double>(),A()); // { dg-error "constexpr" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function1.C
new file mode 100644
index 0000000..ce4520d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function1.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+constexpr int veryabs(int x) { return x < 0 ? -x : x; }
+
+constexpr long long_max() { return 2147483647; }
+
+constexpr int verysquare(int x) { return x * x; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function2.C
new file mode 100644
index 0000000..8cb32c9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function2.C
@@ -0,0 +1,49 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+// Mess with the builtin by redeclaring.
+constexpr int abs(int x) { return x < 0 ? -x : x; }
+
+extern "C"
+{
+ constexpr float
+ squaref(float x) { return x * x; }
+}
+
+// implicitly inline, already: warn?
+inline constexpr double
+squared(double x) { return x * x; }
+
+constexpr int squarei(int x) { return x * x; }
+extern const int side; // { dg-message "not initialized with a constant expression" }
+constexpr int area = squarei(side); // { dg-error "side|argument" }
+// error: squarei(side) is not a constant expression
+
+int next(constexpr int x) // { dg-error "parameter" }
+{ return x + 1; }
+
+constexpr void f(int x) // { dg-error "return type .void" }
+{ /* ... */ }
+
+constexpr int prev(int x)
+{ return --x; } // { dg-error "--" }
+
+constexpr int g(int x, int n) // error: body not just ‘‘return expr’’
+{
+ int r = 1;
+ while (--n > 0) r *= x;
+ return r;
+} // { dg-error "not a return-statement" }
+
+constexpr int
+bar(int x, int y) { return x + y + x * y; } // { dg-message "previously" }
+
+int bar(int x, int y) // { dg-error "redefinition" }
+{ return x * 2 + 3 * y; }
+
+constexpr int twice(int x); // { dg-message "never defined" }
+enum { bufsz = twice(256) }; // { dg-error "" } twice() isn’t (yet) defined
+
+constexpr int fac(int x)
+{ return x > 2 ? x * fac(x - 1) : 1; } // OK
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function3.C
new file mode 100644
index 0000000..ea4f4ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-function3.C
@@ -0,0 +1,29 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+// function template 1
+template<typename T>
+ constexpr int bytesize(T t)
+ { return sizeof (t); } // OK
+
+char buf[bytesize(0)]; // OK -- not C99 VLA
+
+
+// function template 2
+template<typename _Tp>
+ constexpr _Tp
+ square(_Tp x) { return x; }
+
+// Explicit specialization
+template<>
+ constexpr unsigned long
+ square(unsigned long x) { return x * x; }
+
+// Explicit instantiation
+template int square(int);
+
+class A { };
+template A square(A);
+
+template long square(long);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C
new file mode 100644
index 0000000..39be3ed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A
+{
+ constexpr T f ();
+};
+
+int g();
+
+// We should complain about this.
+template<> constexpr int A<int>::f()
+{ return g(); } // { dg-error "non-constexpr" }
+
+// But not about this.
+struct B
+{
+ int i;
+ constexpr B(int i = g()):i(i) { }
+};
+struct C: B { };
+C c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice.C
new file mode 100644
index 0000000..fb7570f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice.C
@@ -0,0 +1,11 @@
+// We used to crash on this instead of giving a decent error.
+// { dg-do compile { target c++11 } }
+
+struct A { int i; };
+
+struct B {
+ const A *a;
+ constexpr B(const A& a): a(&a) { }
+};
+
+constexpr B b{A{42}}; // { dg-error "constant|expansion" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C
new file mode 100644
index 0000000..f6fc80c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice10.C
@@ -0,0 +1,8 @@
+// PR c++/60225
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr A() {}
+ static constexpr A a[2] = {}; // { dg-error "incomplete" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice11.C
new file mode 100644
index 0000000..3e32bf6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice11.C
@@ -0,0 +1,9 @@
+// PR c++/58610
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template<typename> A();
+};
+
+constexpr A a; // { dg-error "literal|matching" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice12.C
new file mode 100644
index 0000000..98f53b1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice12.C
@@ -0,0 +1,9 @@
+// PR c++/58609
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ static constexpr int&& i = 0; // { dg-error "initialization" }
+};
+
+int j = A::i;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice13.C
new file mode 100644
index 0000000..4fe3716
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice13.C
@@ -0,0 +1,8 @@
+// PR c++/59571
+// { dg-do compile { target c++11 } }
+
+template <class>
+struct foo
+{
+ static constexpr int bar{(int)-1};
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice14.C
new file mode 100644
index 0000000..f936fb9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice14.C
@@ -0,0 +1,11 @@
+// PR c++/60305
+// { dg-do compile { target c++11 } }
+
+template<int I> int foo() { return I; }
+
+template<int... I> void bar()
+{
+ constexpr int (*X[])() = { foo<I>... };
+}
+
+template void bar<1,3,5>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C
new file mode 100644
index 0000000..dee4817
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+int x;
+constexpr int& rx = x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice3.C
new file mode 100644
index 0000000..fccd120
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice3.C
@@ -0,0 +1,13 @@
+// PR c++/46289
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+};
+
+struct B
+{
+ A a;
+ constexpr B(): a({1,2}) { } // { dg-error "" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
new file mode 100644
index 0000000..a083c85
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
@@ -0,0 +1,9 @@
+// PR c++/51612
+// { dg-do compile { target c++11 } }
+
+struct A {};
+
+struct B : virtual A
+{
+ constexpr B() { } // { dg-error "has virtual base classes" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C
new file mode 100644
index 0000000..c5a117c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C
@@ -0,0 +1,13 @@
+// PR c++/51621
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A() {}
+};
+
+struct B
+{
+ A a[1];
+ constexpr B() : a() {} // { dg-error "non-constant|non-constexpr" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C
new file mode 100644
index 0000000..30e0a64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C
@@ -0,0 +1,11 @@
+// PR c++/51327
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(int);
+};
+
+struct B : A {}; // { dg-error "no matching" }
+
+constexpr int foo(B) { return 0; } // { dg-error "invalid type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice7.C
new file mode 100644
index 0000000..4fa3a83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice7.C
@@ -0,0 +1,15 @@
+// PR c++/57827
+// { dg-do compile { target c++11 } }
+
+struct C
+{
+ constexpr int fun (int x)
+ {
+ return x + 1;
+ }
+
+ int a = 2;
+ int b = fun(a);
+};
+
+C c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice8.C
new file mode 100644
index 0000000..84bfae0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice8.C
@@ -0,0 +1,17 @@
+// PR c++/53349
+// { dg-do compile { target c++11 } }
+
+template <int N>
+struct Foo {
+ constexpr Foo(const Foo<N-1> a) : m_a(a) {}
+ constexpr Foo(const Foo<N> &a) : m_a(a.m_a) {}
+
+ Foo<N-1> m_a;
+};
+
+template <> struct Foo<0> {};
+
+constexpr Foo<1> catty1(Foo<1> x) { return x; }
+constexpr Foo<2> catty2(Foo<1> x) { return Foo<2>(catty1(x)); }
+
+constexpr auto res = catty2(Foo<1>(Foo<0>()));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C
new file mode 100644
index 0000000..50de372
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C
@@ -0,0 +1,7 @@
+// PR c++/58607
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr A() { i; } // { dg-error "declared|empty body" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
new file mode 100644
index 0000000..514cca5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ static constexpr A a = 1; // { dg-error "incomplete" }
+ constexpr A(int i) { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
new file mode 100644
index 0000000..a8af2e6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
@@ -0,0 +1,31 @@
+// A constructor that might or might not be constexpr still makes
+// its class literal.
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct B
+{
+ constexpr B(T) { }
+ constexpr B() {}
+};
+
+struct A
+{
+ B<A> b;
+};
+
+constexpr A a {};
+
+template <class T>
+struct C
+{
+ constexpr C(T) { }
+ C() {}
+};
+
+struct D
+{
+ C<D> c;
+};
+
+constexpr D d {}; // { dg-error "non-constexpr function" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C
new file mode 100644
index 0000000..c0516f0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C
@@ -0,0 +1,12 @@
+// PR c++/49015
+// { dg-do compile { target c++11 } }
+
+class A;
+
+class B {
+ friend constexpr B f(A); // Line 5
+};
+
+class A {};
+
+constexpr B f(A) { return B(); } // Line 10
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist.C
new file mode 100644
index 0000000..52fc9ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist.C
@@ -0,0 +1,64 @@
+// { dg-do run { target c++11 } }
+
+namespace xstd {
+
+typedef decltype(sizeof(char)) size_t;
+
+template<class E>
+class initializer_list {
+private:
+ size_t sz;
+ const E* start;
+
+public:
+ typedef E value_type;
+ typedef const E& reference;
+ typedef const E& const_reference;
+ typedef size_t size_type;
+ typedef const E* iterator;
+ typedef const E* const_iterator;
+
+ constexpr initializer_list() : sz(), start(nullptr) {}
+
+ template<size_t N>
+ constexpr initializer_list(const E(&array)[N]) : sz(N), start(array) {}
+
+ constexpr size_t size() { return sz; }
+
+ constexpr const E* begin() { return start; }
+
+ constexpr const E* end() { return start + sz; }
+};
+
+template<class E, size_t N>
+constexpr initializer_list<E> make_list(const E(&array)[N]) {
+ return initializer_list<E>(array);
+}
+
+template<class E>
+E min(initializer_list<E> list)
+{
+ // static_assert(list.size() > 0, "Invalid list");
+ auto it = list.begin();
+ E result = *it;
+ for (++it; it != list.end(); ++it) {
+ if (*it < result) {
+ result = *it;
+ }
+ }
+ return result;
+}
+
+}
+
+constexpr int global_i[] = {2, 4, -5, 6, 10};
+constexpr xstd::initializer_list<int> list(global_i);
+#define SA(X) static_assert(X, #X)
+SA(list.size() == 5);
+SA(list.begin()[2] == -5);
+SA(list.end()[-1] == 10);
+
+int main() {
+ if (xstd::min(xstd::make_list(global_i)) != -5)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist2.C
new file mode 100644
index 0000000..65a7036
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist2.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+constexpr auto list = { 1, 2, 3, 4 };
+
+#define SA(X) static_assert(X, #X)
+SA(list.size() == 4);
+SA(list.begin()[2] == 3);
+SA(list.end()[-1] == 4);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist3.C
new file mode 100644
index 0000000..912cf91
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist3.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+#define SA(X) static_assert(X,#X)
+
+constexpr int f(std::initializer_list<int> l) { return l.begin()[0]; }
+
+int main()
+{
+ constexpr int i = f({42});
+ SA(i==42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C
new file mode 100644
index 0000000..d4019b2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+struct A { int i; };
+struct B: A { constexpr B(): A{} {} };
+struct B2: A { constexpr B2(): A{1} {} };
+
+struct C { protected: int i; };
+struct D: C { constexpr D(): C{} {} };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C
new file mode 100644
index 0000000..901510e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist5.C
@@ -0,0 +1,15 @@
+// PR c++/50024
+// { dg-do compile { target c++11 } }
+
+template< class T >
+struct Container
+{
+ Container(){
+ int* ptr = new int{};
+ }
+};
+
+int main() {
+ Container< int > c;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C
new file mode 100644
index 0000000..8c344c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C
@@ -0,0 +1,27 @@
+// PR c++/55419
+// { dg-do compile { target c++11 } }
+
+struct P
+{
+ P () = default;
+ explicit constexpr P (int x) : p (x) {}
+ int p;
+};
+
+struct Q
+{
+ constexpr Q () : q (0x7f) {}
+ int q;
+};
+
+struct R
+{
+ Q q;
+ P p;
+};
+
+void
+foo (R *x)
+{
+ *x = {};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist7.C
new file mode 100644
index 0000000..6fea82f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist7.C
@@ -0,0 +1,7 @@
+// PR c++/60186
+// { dg-require-effective-target c++11 }
+
+template<typename> void foo(int i)
+{
+ constexpr int a[] = { i }; // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-invisiref1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-invisiref1.C
new file mode 100644
index 0000000..e0ede73
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-invisiref1.C
@@ -0,0 +1,36 @@
+// PR c++/55879
+// { dg-do compile { target c++11 } }
+
+class CAddress
+{
+public:
+ constexpr CAddress(unsigned long begin) : m_Begin(begin) {}
+ constexpr CAddress(const CAddress &other) : m_Begin(other.m_Begin) {}
+
+private:
+ unsigned long m_Begin;
+};
+
+extern "C" char _lnkDDRRAM;
+/* internal compiler error on gcc 4.6.3 */
+const CAddress s_Memmap[2]
+{
+ {(unsigned long)&_lnkDDRRAM}, /* segmentation fault */
+ {0x40000000},
+};
+
+class CNested {
+public:
+ constexpr CNested(const CAddress primary)
+ : m_PrimaryBlock(primary) {}
+
+private:
+ CAddress m_PrimaryBlock;
+};
+
+/* internal compiler error on gcc 4.7.2 */
+const CNested s_taskDescriptions[2]
+{
+ {{0x42000000}},
+ {{0x43000000}},
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
new file mode 100644
index 0000000..f255b8d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
@@ -0,0 +1,39 @@
+// { dg-do compile { target c++11 } }
+
+#include <type_traits>
+
+#define IS_LIT(T) (std::is_literal_type<T>::value)
+#define SA(X) static_assert (X, #X)
+#define YES(T) SA(IS_LIT(T))
+#define NO(T) SA(!IS_LIT(T))
+
+enum E1 { };
+enum class E2 { };
+struct Literal {};
+
+struct NotLiteral {
+ ~NotLiteral();
+};
+
+YES(int);
+YES(int[]);
+YES(int[3]);
+YES(double);
+YES(void *);
+YES(decltype (nullptr));
+YES(int Literal::*);
+YES(void (Literal::*)());
+YES(E1);
+YES(E2);
+YES(Literal);
+NO (NotLiteral);
+YES(NotLiteral *);
+YES(NotLiteral NotLiteral::*);
+YES(NotLiteral (NotLiteral::*)(NotLiteral));
+
+struct A {
+ A(const A&) = default;
+ A(int);
+};
+
+NO(A); // no constexpr ctor other than copy
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-main.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-main.C
new file mode 100644
index 0000000..42720ad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-main.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+
+constexpr int main (); // { dg-error "constexpr" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C
new file mode 100644
index 0000000..775c103
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C
@@ -0,0 +1,18 @@
+// PR c++/48296
+// { dg-do compile { target c++11 } }
+
+struct X
+{
+ constexpr X() { }
+ constexpr X f(X x) { return x; }
+ constexpr X g(X x);
+};
+
+constexpr X X::g(X x) { return x; }
+
+struct Y
+{
+ Y() { }
+ constexpr Y f(Y y); // { dg-error "not a literal type" }
+ static constexpr Y g(Y y) {} // { dg-error "constexpr" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C
new file mode 100644
index 0000000..afaf2e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C
@@ -0,0 +1,38 @@
+// PR c++/48911
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert((X),#X)
+
+struct A
+{
+ constexpr A () : a (6) {}
+ int a;
+};
+
+int
+main ()
+{
+ constexpr int a[2] = { 42 };
+ constexpr int i = a[1];
+ SA(i==0);
+ constexpr int b[1] = { };
+ constexpr int j = b[0];
+ SA(j==0);
+ constexpr char c[2] = "a";
+ constexpr char k = c[1];
+ SA(k==0);
+ constexpr char d[2] = "";
+ constexpr char l = d[1];
+ SA(l==0);
+ constexpr wchar_t e[2] = L"a";
+ constexpr wchar_t m = e[1];
+ SA(m==0);
+ constexpr wchar_t f[2] = L"";
+ constexpr wchar_t n = f[1];
+ SA(n==0);
+ constexpr A g[2] = { A () };
+ constexpr A o = g[0];
+ SA(o.a == 6);
+ constexpr A p = g[1];
+ SA(p.a == 6);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C
new file mode 100644
index 0000000..832a161
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ mutable int j;
+};
+
+constexpr A a = { 0, 1 };
+constexpr A b = a; // { dg-error "mutable" }
+constexpr int i = a.i;
+constexpr int j = a.j; // { dg-error "mutable" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C
new file mode 100644
index 0000000..fb4c012
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg1.C
@@ -0,0 +1,69 @@
+// Negative examples from N3092 (FCD)
+// { dg-do compile { target c++11 } }
+
+// OK: declaration
+constexpr int square(int x); // { dg-message "never defined" }
+
+// error: pixel is a type
+constexpr struct pixel {
+ int x;
+ int y;
+ // OK: declaration
+ constexpr pixel(int);
+}; // { dg-error "constexpr" }
+constexpr pixel::pixel(int a)
+// OK: definition
+ : x(square(a)), y(square(a)) // { dg-error "square" }
+{ }
+
+// error: square not defined, so small(2) not constant (5.19), so constexpr
+// not satisfied
+constexpr pixel small(2); // { dg-message "in constexpr expansion" }
+
+// error: not for parameters
+int next(constexpr int x) { // { dg-error "parameter" }
+ return x + 1;
+}
+
+// error: not a definition
+extern constexpr int memsz; // { dg-error "definition" }
+
+// error: return type is void
+constexpr void f(int x) // { dg-error "void" }
+{ /* ... */ }
+// error: use of decrement
+constexpr int prev(int x)
+{ return --x; } // { dg-error "-- x" }
+
+// error: body not just return expr
+constexpr int g(int x, int n) {
+ int r = 1;
+ while (--n > 0) r *= x;
+ return r;
+} // { dg-error "body of constexpr function" }
+
+class debug_flag {
+public:
+ explicit debug_flag(bool);
+ constexpr bool is_on(); // { dg-error "not a literal type" } debug_flag not literal type
+private:
+ bool flag;
+};
+// OK
+constexpr int bar(int x, int y) // { dg-message "previously defined here" }
+{ return x + y + x*y; }
+// ...
+// error: redefinition of bar
+int bar(int x, int y) // { dg-error "redefinition" }
+{ return x * 2 + 3 * y; }
+
+struct pixel2 { // { dg-message "no user-provided default constructor" }
+ int x, y;
+};
+constexpr pixel2 ur = { 1294, 1024 };// OK
+constexpr pixel2 origin; // { dg-error "uninitialized const" }
+
+constexpr const int* addr(const int& ir) { return &ir; } // OK
+
+// error, initializer for constexpr variable not a constant
+extern constexpr const int* tp = addr(5); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg2.C
new file mode 100644
index 0000000..793b4c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-neg2.C
@@ -0,0 +1,27 @@
+// PR c++/54020
+// { dg-do compile { target c++11 } }
+
+// Preliminaries.
+extern int nonconst_func(int);
+constexpr int identity(int x) { return x; }
+constexpr int zero() { return identity(0); }
+constexpr int one() { return identity(1); }
+
+// Correctly accepted.
+constexpr int three = one() ? 3 : nonconst_func(0);
+
+// Incorrectly accepted. See [dcl.constexpr] #5:
+// For a constexpr function, if no function argument values exist
+// such that the function invocation sub-stitution would produce a
+// constant expression (5.19), the program is ill-formed; no diagnostic
+// required.
+constexpr int bogus() { return zero () ? 3 : nonconst_func(0); } // { dg-error "nonconst_func" }
+
+// Correctly rejected (not sure why).
+constexpr int correct_error() { return nonconst_func(0); } // { dg-error "nonconst_func" }
+
+// Correctly rejected.
+constexpr int z = bogus(); // { dg-error "" }
+
+// This is also correctly rejected.
+constexpr int correct_failure() { return 0 ? 3 : nonconst_func(0); } // { dg-error "nonconst_func" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept.C
new file mode 100644
index 0000000..dbadaa8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct is_funny {
+ static constexpr bool value = false;
+};
+
+template<class T>
+constexpr T value(T t) noexcept(is_funny<T>::value) { return t; } // Line 7
+
+constexpr bool ok = noexcept(value(42));
+
+static_assert(ok, "Assertion failure");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept2.C
new file mode 100644
index 0000000..d10039a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept2.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+constexpr T value(T t) { return t; }
+
+template<class T>
+struct is_funny {
+ static constexpr bool value = false;
+};
+
+template<class T>
+void eval() noexcept(value(is_funny<T>::value)) {}
+
+constexpr bool ok = noexcept(eval<int>()); // line 12
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept3.C
new file mode 100644
index 0000000..9541bc0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept3.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+constexpr int f(int i) { return i; }
+#define SA(X) static_assert (X, #X)
+SA(noexcept(f(42)));
+int j;
+SA(!noexcept(f(j)));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept4.C
new file mode 100644
index 0000000..eb71900
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept4.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+// A call is noexcept if it is a valid subexpression of a constant
+// expression, even if it is not itself a constant expression.
+
+#define SA(X) static_assert(X,#X)
+
+constexpr const int* f(const int *p) { return p; }
+
+int main()
+{
+ constexpr int i = 42;
+ SA(noexcept(*f(&i)));
+ SA(noexcept(f(&i)));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C
new file mode 100644
index 0000000..7b0c835
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+struct booleable {
+ bool data;
+ constexpr explicit operator bool() { return data; }
+};
+
+constexpr booleable truthy_func() { return {true}; }
+
+void funky() noexcept(truthy_func()) {}
+
+int main() {
+ funky();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C
new file mode 100644
index 0000000..76d9246
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C
@@ -0,0 +1,10 @@
+// PR c++/51305
+// { dg-do compile { target c++11 } }
+
+constexpr bool ok() noexcept
+{
+ typedef int type;
+ return true;
+}
+
+constexpr auto x = ok();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept7.C
new file mode 100644
index 0000000..2a70d7b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept7.C
@@ -0,0 +1,9 @@
+// PR c++/53473
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct A
+{
+ static constexpr T foo() noexcept { return 0; }
+};
+
+template<> constexpr int A<int>::foo() noexcept { return 0; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg.C
new file mode 100644
index 0000000..0f68643
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg.C
@@ -0,0 +1,24 @@
+// Example from issue 1125 drafting; D() and v were well-formed with the
+// wording approved in Rapperswil, now seems they should be ill-formed.
+// { dg-do compile { target c++11 } }
+
+struct B {
+ constexpr B(int x) : i(0) { } // "x" is unused
+ int i;
+};
+
+int global; // { dg-message "not const" }
+
+struct D : B {
+ constexpr D() : B(global) { } // { dg-error "global|argument" }
+};
+
+struct A2 {
+ constexpr A2(bool b, int x) : m(b ? 42 : x) { }
+ int m;
+};
+
+// ok, constructor call initializes m with the value 42 after substitution
+constexpr int v = A2(true, global).m; // { dg-error "global" }
+// error: initializer for m is "x", which is non-constant
+constexpr int w = A2(false, global).m; // { dg-error "global" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C
new file mode 100644
index 0000000..32a023b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C
@@ -0,0 +1,17 @@
+// PR c++/47200
+// { dg-do compile { target c++11 } }
+// { dg-options "-w" }
+
+template < int > struct duration
+{
+ constexpr int count ();
+ static constexpr duration min ();
+};
+
+constexpr int
+f (duration < 0 > d, duration < 0 > )
+{
+ return d.count ();
+}
+
+static_assert (f (duration < 0 >::min (), duration < 0 > ()), ""); // { dg-error "non-constant|before its definition" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C
new file mode 100644
index 0000000..d8603f8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg3.C
@@ -0,0 +1,22 @@
+// PR c++/49988
+// { dg-do run { target c++11 } }
+
+template<int ... I> struct X { };
+
+struct A {
+ char data[3];
+ template<int ... I>
+ constexpr
+ A(const char (&s)[3], X<I...> x) : data{ s[I]...} { }
+};
+struct B {
+ A a;
+ B(const char (&s)[3]) : a{s,X<0,1,2>{}} { }
+};
+
+int main()
+{
+ B b{"12"};
+ if (b.a.data[0] != '1')
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit.C
new file mode 100644
index 0000000..0534b41
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit.C
@@ -0,0 +1,13 @@
+// FIXME this is currently invalid, but seems like it should be OK
+// { dg-do compile { target c++11 } }
+
+struct A { A() { } };
+
+template<class T>
+constexpr bool ignore(T&&) { return true; }
+
+static_assert(ignore(10), "Error"); // OK
+
+A s;
+
+static_assert(ignore(s), "Error"); // Currently an error
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit2.C
new file mode 100644
index 0000000..2d712b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit2.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ ~A();
+};
+
+template<class T>
+struct W {
+ T t;
+ template<class U>
+ constexpr W(U&& u) : t(u) {}
+};
+
+template <class T>
+constexpr W<T> make_w(T& w) { return W<T>(w); }
+
+A a;
+constexpr auto w = make_w(a); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonstatic.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonstatic.C
new file mode 100644
index 0000000..bb0743a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nonstatic.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr int i; // { dg-error "" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C
new file mode 100644
index 0000000..8ff8998
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+constexpr int zero() { return 0; }
+
+void* ptr1 = zero(); // { dg-error "int" }
+constexpr void* ptr2 = zero(); // { dg-error "int" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
new file mode 100644
index 0000000..41afbe9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
@@ -0,0 +1,29 @@
+// { dg-do compile { target c++11 } }
+
+// From N2235
+
+// 4.5.2 semantics
+
+// p 1 constexpr specifier
+// objects, static const data
+struct A1 { int i; }; // { dg-message "no user-provided default constructor" }
+
+constexpr int i1 = 1024;
+constexpr A1 a1 = A1();
+
+// error: not a definition
+extern constexpr int i2; // { dg-error "definition" }
+
+// error: missing initializer
+constexpr A1 a2; // { dg-error "uninitialized const" }
+
+const constexpr A1 a3 = A1();
+
+volatile constexpr A1 a4 = A1(); // { dg-error "both .volatile. and .constexpr. cannot" }
+
+// error: on type declaration
+constexpr struct pixel
+{
+ int x;
+ int y;
+}; // { dg-error "cannot be used for type declarations" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object2.C
new file mode 100644
index 0000000..d52967a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-object2.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+constexpr int verysquare(int x) { return x * x; }
+
+const double mass = 9.8;
+constexpr double energy = mass * verysquare(56.6); // { dg-error "mass" "" { xfail *-*-* } }
+
+int arr[(int)mass]; // { dg-error "mass" "" { xfail *-*-* } }
+
+float array[verysquare(9)]; // OK -- not C99 VLA
+
+extern const int medium;
+const int high = verysquare(medium); // OK -- dynamic initialization
+
+enum { Max = verysquare(7) }; // OK
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow.C
new file mode 100644
index 0000000..8406e49
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-w -ftrack-macro-expansion=0" }
+
+#include <limits.h>
+extern constexpr int max_s = INT_MAX + 1; // { dg-error "" }
+extern constexpr unsigned max_u = UINT_MAX + 1u; // OK
+extern constexpr int abs_s = -INT_MIN; // { dg-error "" } overflows on 2's complement machines
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C
new file mode 100644
index 0000000..bd2e687
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C
@@ -0,0 +1,8 @@
+// PR c++/47504
+// { dg-do compile { target c++11 } }
+
+char constexpr sub(char arg)
+{ return char(arg - char(1)); }
+
+int main()
+{ static char constexpr m = sub(-1); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pedantic.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pedantic.C
new file mode 100644
index 0000000..21f4c83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pedantic.C
@@ -0,0 +1,17 @@
+// The FCD doesn't allow typedefs and static_assert in constexpr functions,
+// but it should.
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+template <class T>
+constexpr T f(T t)
+{
+ typedef T T2; // { dg-warning "constexpr" "" { xfail *-*-* } }
+ static_assert (T2(0) == T(0), ""); // { dg-warning "constexpr" "" { xfail *-*-* } }
+ return t;
+}
+
+int main()
+{
+ constexpr int i = f(42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pos1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pos1.C
new file mode 100644
index 0000000..8e82ef5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pos1.C
@@ -0,0 +1,60 @@
+// Positive examples from N3092 (FCD)
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert(X, #X)
+
+constexpr int bufsz = 1024; // OK: definition
+SA (bufsz == 1024);
+
+constexpr int square(int x); // OK: declaration
+
+struct pixel {
+ int x;
+ int y;
+ // OK: declaration
+ constexpr pixel(int);
+};
+constexpr pixel::pixel(int a) // OK: definition
+ : x(square(a)), y(square(a))
+{ }
+
+constexpr int square(int x) // OK: definition
+{ return x * x; }
+
+constexpr pixel large(4); // OK: square defined
+SA(large.x == 16 && large.y==16);
+
+constexpr long long_max() // OK
+{ return 2147483647; }
+
+SA(long_max() == 2147483647);
+
+constexpr int abs(int x) // OK
+{ return x < 0 ? -x : x; }
+
+SA(abs(-1) == 1);
+SA(abs(24) == 24);
+
+struct Length {
+ explicit constexpr Length(int i = 0) : val(i) { }
+private:
+ int val;
+};
+
+constexpr Length l1;
+constexpr Length l2(12);
+
+struct pixel2 {
+ int x, y;
+};
+constexpr pixel2 ur = { 1294, 1024 };// OK
+
+SA(ur.x == 1294 && ur.y == 1024);
+
+constexpr const int* addr(const int& ir) { return &ir; } // OK
+static const int x = 5;
+extern constexpr const int* xp = addr(x); // OK: (const int*)&(const int&)x
+ // is an address contant expression
+SA(xp == &x);
+extern constexpr int x2 = *addr(5);
+SA(x2 == 5);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-potential1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-potential1.C
new file mode 100644
index 0000000..f960e3a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-potential1.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// We decided in Rapperswil that it's OK if any value of decide can produce
+// a constant expression.
+
+constexpr int may_throw(bool decide) {
+ return decide ? 42 : throw -1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem.C
new file mode 100644
index 0000000..c16fb15
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+struct C { // literal type
+ int m;
+ int n;
+ constexpr C(int m) : m(m), n(-m) {}
+ constexpr bool is_neg() { return m < 0; }
+};
+
+constexpr bool check1(const C& c, int C:: *pm) { return c.*pm < 0; } // #1
+
+constexpr bool check2(const C* pc, bool (C::*pm)() const) { return
+(pc->*pm)(); } // #2
+
+constexpr C c(-1);
+
+static_assert(!check1(c, &C::n), "Error");
+static_assert(check1(c, &C::m), "Error");
+
+static_assert(check2(&c, &C::is_neg), "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C
new file mode 100644
index 0000000..18648d9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C
@@ -0,0 +1,14 @@
+// PR c++/51489
+// DR 1313
+// { dg-do compile { target c++11 } }
+
+struct array
+{
+ constexpr array() :x(0) {}
+ constexpr int const* begin() { return &x; }
+ int x;
+};
+constexpr array aa;
+constexpr auto b = aa.begin();
+static_assert(b-b == 0, "compiles just fine");
+static_assert(aa.begin()-aa.begin() == 0, "compiler thinks it's not a constant expression");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C
new file mode 100644
index 0000000..f54b7c5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-pure.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ virtual void f() = 0;
+};
+
+struct B: A
+{
+ void f() { }
+};
+
+B b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C
new file mode 100644
index 0000000..e3e13f7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C
@@ -0,0 +1,6 @@
+// Test that we catch excessive recursion.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fconstexpr-depth=5" }
+// { dg-prune-output "in constexpr expansion" }
+constexpr int f (int i) { return f (i-1); }
+constexpr int i = f(42); // { dg-error "constexpr evaluation depth" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C
new file mode 100644
index 0000000..6010b20
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration1.C
@@ -0,0 +1,10 @@
+// PR c++/59123
+// { dg-do compile { target c++11 } }
+
+// Fwd-declarations
+struct S;
+extern const S s;
+
+// (... later) definitions
+struct S {};
+constexpr S s {};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C
new file mode 100644
index 0000000..f3e4cea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C
@@ -0,0 +1,44 @@
+// PR c++/49172
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert((X),#X)
+
+constexpr int g() { return 42; }
+constexpr int(&rg)() = g; // #1
+
+SA(rg() == 42);
+
+constexpr int i = 24;
+constexpr int const& ri = i; // #2
+
+SA(&ri == &i);
+SA(ri == 24);
+
+void f()
+{
+ constexpr int(&rg)() = g; // #1
+
+ SA(rg() == 42);
+
+ constexpr static int i = 24;
+ constexpr int const& ri = i; // #2
+
+ SA(&ri == &i);
+ SA(ri == 24);
+}
+
+template <class T>
+void f2()
+{
+ constexpr int(&rg)() = g; // #1
+
+ SA(rg() == 42);
+
+ constexpr static int i = 24;
+ constexpr int const& ri = i; // #2
+
+ SA(&ri == &i);
+ SA(ri == 24);
+}
+
+template void f2<int>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C
new file mode 100644
index 0000000..7697363
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C
@@ -0,0 +1,17 @@
+// Negative reference variable tests.
+// { dg-do compile { target c++11 } }
+
+extern int *p;
+constexpr int& ri = *p; // { dg-error "p" }
+
+extern constexpr int &er; // { dg-error "not a definition" }
+constexpr int& ri2 = er; // { dg-error "er" }
+
+void f(int j)
+{
+ constexpr int i = 42;
+ constexpr int const& ri = i; // { dg-error "" }
+
+ constexpr int& rj = j; // { dg-error "" }
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C
new file mode 100644
index 0000000..7936536
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C
@@ -0,0 +1,10 @@
+// PR c++/50298
+// { dg-do compile { target c++11 } }
+
+int global_variable;
+
+template <class T> struct X {
+ static constexpr T r = global_variable;
+};
+
+X<int&> x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C
new file mode 100644
index 0000000..ce1ce52
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C
@@ -0,0 +1,18 @@
+// PR c++/54777
+// { dg-do compile { target c++11 } }
+
+struct S
+{
+ int s[1];
+ constexpr const int &foo (unsigned i) { return (i < 1 ? 0 : throw 1), s[i]; }
+ constexpr const int &bar (unsigned i) { return i < 1 ? s[i] : (throw 0, s[i]); }
+};
+
+int
+main ()
+{
+ constexpr S a {};
+ constexpr int i = a.foo (0);
+ constexpr int j = a.bar (0);
+ static_assert (i == j, "Ouch");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C
new file mode 100644
index 0000000..69db98b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C
@@ -0,0 +1,37 @@
+// PR c++/56728
+// { dg-require-effective-target c++11 }
+
+class B {
+public:
+ static B instance;
+ class Inner
+ {
+ public:
+ class Wuzi
+ {
+ unsigned int m;
+ } m_Class[3];
+ unsigned m_Int[4];
+ };
+
+ constexpr static Inner & getInner()
+ {
+ /* I am surprised this is considered a constexpr */
+ return *((Inner *)4);
+ } // { dg-error "reinterpret_cast" }
+};
+
+B B::instance;
+
+class A
+{
+public:
+ constexpr A(B &bridge, B::Inner &bridge2, unsigned char index)
+ : m_Bridge(bridge), m_Wuz(bridge2.m_Class[index])
+ {}
+
+ B &m_Bridge;
+ B::Inner::Wuzi &m_Wuz;
+};
+A works{B::instance, B::getInner(), 3};
+A crashnkill[1]{{B::instance, B::getInner(), 3}};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C
new file mode 100644
index 0000000..697203d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C
@@ -0,0 +1,13 @@
+// PR c++/49673: check that test_data goes into .rodata
+// { dg-do compile { target c++11 } }
+// { dg-additional-options -G0 { target { { alpha*-*-* frv*-*-* ia64-*-* lm32*-*-* m32r*-*-* microblaze*-*-* mips*-*-* nios2-*-* powerpc*-*-* rs6000*-*-* score*-*-* } && { ! { *-*-darwin* *-*-aix* alpha*-*-*vms* } } } } }
+// { dg-final { scan-assembler "\\.rdata" { target mips*-*-* } } }
+// { dg-final { scan-assembler "rodata" { target { { *-*-linux-gnu *-*-gnu* *-*-elf } && { ! mips*-*-* } } } } }
+
+struct Data
+{
+ int i;
+ constexpr Data(int i = 0) : i(i+1) {}
+};
+
+extern const Data test_data = { 1 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-sassert.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-sassert.C
new file mode 100644
index 0000000..7f82671
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-sassert.C
@@ -0,0 +1,13 @@
+// Allow static_assert in constexpr constructors, too.
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct A
+{
+ int i;
+
+ constexpr A(int i) : i(i)
+ {
+ static_assert(sizeof(T) == 1, "");
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-specialization.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-specialization.C
new file mode 100644
index 0000000..80f56a1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-specialization.C
@@ -0,0 +1,12 @@
+// PR c++/56871
+// { dg-do compile { target c++11 } }
+
+template<typename T> constexpr int foo(T);
+template<> int foo(int);
+template<> int foo(int); // { dg-error "previous" }
+template<> constexpr int foo(int); // { dg-error "redeclaration" }
+
+template<typename T> int bar(T);
+template<> constexpr int bar(int);
+template<> constexpr int bar(int); // { dg-error "previous" }
+template<> int bar(int); // { dg-error "redeclaration" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static.C
new file mode 100644
index 0000000..24174ac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static.C
@@ -0,0 +1,24 @@
+// Test for constant initialization of non-literal class (e.g. mutex)
+// { dg-options "-save-temps" }
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i;
+ constexpr A(int _i): i(_i) { }
+ A(const A&); // non-trivial copy ctor makes A non-literal
+};
+
+A a(42); // constexpr constructor allows constant initialization
+A ar[3] = { { 1 }, { 2 }, { 3 } };
+// { dg-final { scan-assembler-not "static_initialization" } }
+// { dg-final cleanup-saved-temps }
+
+int main()
+{
+ if (a.i != 42
+ || ar[0].i != 1
+ || ar[1].i != 2
+ || ar[2].i != 3)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static10.C
new file mode 100644
index 0000000..e908fb3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static10.C
@@ -0,0 +1,19 @@
+// PR c++/55944
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct Test
+{
+ constexpr Test(T val) : value(val) {}
+ static void test()
+ {
+ static constexpr Test<int> x(42); // ICE
+ }
+ T value;
+};
+
+int main()
+{
+ static constexpr Test<int> x(42); // OK
+ Test<double>::test();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C
new file mode 100644
index 0000000..91cc25a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static11.C
@@ -0,0 +1,14 @@
+// PR c++/54532
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert(X,#X)
+
+struct A {
+ int i;
+ constexpr static int A::*p = &A::i;
+};
+
+constexpr A a = { 42 };
+SA(a.*A::p == 42);
+
+constexpr int A::* A::p;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static2.C
new file mode 100644
index 0000000..70a254c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static2.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+struct IsLiteral {};
+
+struct ShouldBeLiteral {
+ constexpr ShouldBeLiteral(int){}
+};
+
+struct StaticDataMember {
+ static constexpr IsLiteral one = IsLiteral(); // #1
+ static constexpr ShouldBeLiteral two= ShouldBeLiteral(-1); // #2
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static3.C
new file mode 100644
index 0000000..6d65a62
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static3.C
@@ -0,0 +1,18 @@
+// Test for constant initialization of class with vtable
+// { dg-options "-save-temps" }
+// { dg-final { scan-assembler-not "static_initialization" } }
+// { dg-final cleanup-saved-temps }
+// { dg-do run { target c++11 } }
+
+int r = 1;
+// implicit default constructor for A and B is constexpr
+struct A { virtual void f() {} };
+struct B: A { virtual void f() { r = 0; } };
+
+B b;
+
+int main()
+{
+ b.f();
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static4.C
new file mode 100644
index 0000000..fa1a4c7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static4.C
@@ -0,0 +1,19 @@
+// { dg-do run { target c++11 } }
+
+extern "C" void abort ();
+extern int ar[2];
+
+int f()
+{
+ if (ar[0] != 42 || ar[1] != 0)
+ abort ();
+ return 1;
+}
+
+int i = f();
+
+int ar[2] = { 42, i };
+
+int main()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static5.C
new file mode 100644
index 0000000..d161cf5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static5.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A
+{
+ constexpr static T t = T(); // { dg-error "literal" }
+};
+template <class T>
+constexpr T A<T>::t;
+
+struct B
+{
+ ~B();
+};
+
+B b = A<B>::t;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static6.C
new file mode 100644
index 0000000..78065c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static6.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ constexpr operator int() { return 4; }
+};
+
+template <int I>
+struct C;
+
+template<>
+struct C<4> { typedef int TP; };
+
+template <class T>
+struct A
+{
+ constexpr static B t = B();
+ C<t>::TP tp;
+};
+
+A<B> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C
new file mode 100644
index 0000000..272ebd9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C
@@ -0,0 +1,10 @@
+// PR c++/48945
+// { dg-do compile { target c++11 } }
+
+struct A {
+ static constexpr bool is();
+ static constexpr bool is_not();
+};
+
+constexpr bool A::is() { return true; }
+constexpr bool A::is_not() const { return true; } // { dg-error "static" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
new file mode 100644
index 0000000..34aa5af
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
@@ -0,0 +1,8 @@
+// PR c++/50258
+// { dg-do compile { target c++11 } }
+// { dg-options "-fpermissive" }
+
+struct Foo {
+ static const double d = 3.14; // { dg-warning "constexpr" }
+};
+const double Foo::d; // { dg-warning "constexpr" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-stmtexpr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-stmtexpr.C
new file mode 100644
index 0000000..bebd4f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-stmtexpr.C
@@ -0,0 +1,9 @@
+// PR c++/46977
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template < typename > void
+foo ()
+{
+ ({int i;}), 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C
new file mode 100644
index 0000000..0f561a4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-string.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+constexpr char c1 = "hi"[1];
+constexpr char c2 = "hi"[2];
+constexpr char c3 = "hi"[3]; // { dg-error "out of bound" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch.C
new file mode 100644
index 0000000..ee94159
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+constexpr T value(T t = T()) { return t; }
+
+enum us_enum { us_item = value<short>() }; // OK
+
+void func(us_enum n) {
+ switch (n) {
+ case value(us_item): ; // #1 Error
+ default: ;
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch2.C
new file mode 100644
index 0000000..652a08d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-switch2.C
@@ -0,0 +1,23 @@
+// Test for constexpr conversion in case context
+// { dg-do compile { target c++11 } }
+
+enum class E { e1, e2 };
+
+struct A
+{
+ E e;
+ constexpr operator E() { return e; }
+ constexpr A(E e): e(e) { }
+};
+
+E e;
+
+int main()
+{
+ switch (e)
+ {
+ case A(E::e1):
+ case A(E::e2):
+ ;
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-synth1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-synth1.C
new file mode 100644
index 0000000..27375e2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-synth1.C
@@ -0,0 +1,14 @@
+// PR c++/46472
+// { dg-do compile { target c++11 } }
+
+template<class T> struct A {
+ T t;
+ constexpr A(){}
+};
+
+struct B
+{
+ A<int> a;
+};
+
+B b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-targ.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-targ.C
new file mode 100644
index 0000000..b517114
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-targ.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ constexpr operator double() { return 1.0; }
+};
+
+template <int I>
+struct B
+{ };
+
+constexpr A a { };
+B<a> b; // { dg-error "template argument|invalid type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C
new file mode 100644
index 0000000..d065436
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct A { int i; };
+constexpr A f2 (const A& a) { return a; }
+constexpr int f1 (const A &a) { return f2(a).i; }
+A g(const A &a)
+{
+ return { f1(a) };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C
new file mode 100644
index 0000000..b949bd6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C
@@ -0,0 +1,27 @@
+// PR c++/50248, DR 1358
+// { dg-do compile { target c++11 } }
+
+template<class Elt, unsigned max>
+struct earray
+{
+ Elt elts[max];
+ earray() = default;
+ template<typename... Elt2>
+ constexpr earray(Elt2&& ... e): elts(0) { }
+};
+
+struct SessionData
+{
+ SessionData(SessionData&) = delete;
+ SessionData() = default;
+};
+
+struct MapSessionData : SessionData
+{
+ earray<short, 11> equip_index;
+};
+
+void test()
+{
+ MapSessionData *sd = new MapSessionData;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C
new file mode 100644
index 0000000..a316b34
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A
+{
+ T t;
+ constexpr A() { } // { dg-error "uninitialized" }
+};
+
+int main()
+{
+ constexpr A<int> a; // { dg-error "A()" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C
new file mode 100644
index 0000000..f0ac222
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct A { constexpr operator int() { return 42; } };
+
+template<class T>
+struct B {
+ static const int versionConst = A();
+ enum { versionEnum = versionConst };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C
new file mode 100644
index 0000000..7adcae8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C
@@ -0,0 +1,26 @@
+// PR c++/55931
+// { dg-do compile { target c++11 } }
+
+#include <type_traits>
+
+template<typename Type>
+class Test
+{
+ public:
+ constexpr Test(const Type val) : _value(val) {}
+ constexpr Type get() const {return _value;}
+ static void test()
+ {
+ static constexpr Test<int> x(42);
+ std::integral_constant<int, x.get()> i; // This is not working
+ }
+ protected:
+ Type _value;
+};
+
+int main()
+{
+ static constexpr Test<int> x(42);
+ std::integral_constant<int, x.get()> i; // This is working
+ Test<double>::test();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C
new file mode 100644
index 0000000..aa80658
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template5.C
@@ -0,0 +1,6 @@
+// PR c++/54946
+// { dg-do compile { target c++11 } }
+
+template<const char*s> static void testfunc();
+constexpr struct testtype { const char* str; } test = { "abc"} ;
+void (*functionpointer)() = testfunc<(const char*) test.str>; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
new file mode 100644
index 0000000..fd0c957
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
@@ -0,0 +1,19 @@
+// PR c++/59268
+// { dg-do compile { target c++11 } }
+
+template <typename>
+struct A
+{
+ constexpr A (int) {}
+ virtual void foo ()
+ {
+ constexpr A<void> a (0);
+ }
+};
+
+void
+bar ()
+{
+ A<int> a (3);
+ a.foo ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-throw.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-throw.C
new file mode 100644
index 0000000..5666629
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-throw.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+constexpr int may_throw(bool decide) {
+ return decide ? 42 : throw -1; // { dg-error "throw" }
+}
+
+constexpr int x = may_throw(false); // { dg-message "may_throw" }
+constexpr int y = may_throw(true);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C
new file mode 100644
index 0000000..f59cd84
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C
@@ -0,0 +1,106 @@
+// PR c++/53202
+// { dg-do run { target c++11 } }
+
+#include <tuple>
+
+template<typename Callable>
+ struct Bind_simple
+ {
+ explicit
+ Bind_simple(const Callable& callable)
+ : _M_bound(callable)
+ { }
+
+ Bind_simple(const Bind_simple&) = default;
+ Bind_simple(Bind_simple&&) = default;
+
+ auto operator()() -> decltype((*(Callable*)0)())
+ {
+ return std::get<0>(_M_bound)();
+ }
+
+ private:
+
+ std::tuple<Callable> _M_bound;
+ };
+
+template<typename Callable>
+ Bind_simple<Callable>
+ bind_simple(Callable& callable)
+ {
+ return Bind_simple<Callable>(callable);
+ }
+
+struct thread
+{
+ struct ImplBase { };
+
+ template<typename T>
+ struct Impl : ImplBase {
+ T t;
+ Impl(T&& t) : t(std::move(t)) { }
+ };
+
+ template<typename T>
+ thread(T& t)
+ {
+ auto p = make_routine(bind_simple(t));
+
+ p->t();
+
+ delete p;
+ }
+
+ template<typename Callable>
+ Impl<Callable>*
+ make_routine(Callable&& f)
+ {
+ return new Impl<Callable>(std::forward<Callable>(f));
+ }
+};
+
+
+int c;
+class background_hello
+{
+public:
+ background_hello()
+ {
+ __builtin_printf("default ctor called, this=%p\n", this);
+ ++c;
+ }
+
+ background_hello(const background_hello &)
+ {
+ __builtin_printf("copy ctor called\n");
+ ++c;
+ }
+
+ background_hello(background_hello &&)
+ {
+ __builtin_printf("move ctor called\n");
+ ++c;
+ }
+
+ void operator ()() const
+ {
+ __builtin_printf("void background_hello::operator()() called, this=%p\n", this);
+ }
+
+ ~background_hello()
+ {
+ __builtin_printf("destructor called, this=%p\n", this);
+ --c;
+ }
+
+};
+
+int main()
+{
+ {
+ background_hello bh;
+ thread t(bh);
+ }
+ if (c != 0)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
new file mode 100644
index 0000000..98c2309
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typedef1.C
@@ -0,0 +1,11 @@
+// PR c++/50508
+// { dg-do compile { target c++11 } }
+
+template <class T>
+ struct integral_constant {
+ typedef T value_type;
+ constexpr operator value_type() { return true; }
+ };
+
+static constexpr bool value = integral_constant<bool>()
+ && true;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typeid.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typeid.C
new file mode 100644
index 0000000..32af84e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-typeid.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+#include <typeinfo>
+
+struct A { virtual void f(); };
+
+extern constexpr const std::type_info* p1 = &typeid(int);
+extern constexpr const std::type_info* p2 = &typeid(A);
+// typeid-expression whose operand is of a polymorphic class type
+extern constexpr const std::type_info* p3 = &typeid((A())); // { dg-error "" "" { xfail *-*-* } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C
new file mode 100644
index 0000000..0c3548c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C
@@ -0,0 +1,16 @@
+// Test that we don't have to deal with type punning
+// DR 1188 says this is ill-formed
+// { dg-do compile { target c++11 } }
+
+union U
+{
+ float f;
+ unsigned char ca[sizeof(float)];
+};
+
+constexpr U u = { 1.0 };
+constexpr float f = u.f;
+constexpr unsigned char c = u.ca[0]; // { dg-error "U::ca" }
+
+constexpr double d = 1.0;
+constexpr unsigned char c2 = (unsigned char&)d; // { dg-error "char. glvalue" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C
new file mode 100644
index 0000000..1a5e832
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C
@@ -0,0 +1,18 @@
+// PR c++/51675
+// { dg-do compile { target c++11 } }
+
+union foo
+{
+ int x = 0;
+ short y;
+
+ constexpr foo() = default;
+};
+
+union bar
+{
+ int x;
+ short y;
+
+ constexpr bar() = default; // { dg-error "constexpr" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C
new file mode 100644
index 0000000..ecae28d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C
@@ -0,0 +1,12 @@
+// PR c++/51675
+// { dg-do compile { target c++11 } }
+
+union foo
+{
+ int x;
+ short y;
+
+ constexpr foo(): x(0) { }
+};
+
+constexpr foo f;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union4.C
new file mode 100644
index 0000000..a8d6b8d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union4.C
@@ -0,0 +1,18 @@
+// PR c++/54922
+// { dg-do compile { target c++11 } }
+
+struct nullable_int
+{
+ bool init_;
+ union {
+ unsigned char for_value_init;
+ int value_;
+ };
+
+ constexpr nullable_int() : init_(false), for_value_init() {}
+};
+
+#define SA(X) static_assert(X,#X)
+
+constexpr nullable_int n;
+SA((n.for_value_init == 0));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C
new file mode 100644
index 0000000..5779666
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-union5.C
@@ -0,0 +1,42 @@
+// PR c++/54922
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+#define SA(X) static_assert(X,#X)
+
+struct A
+{
+ union {
+ union {
+ union {
+ unsigned char i;
+ int j;
+ };
+ };
+ };
+
+ constexpr A() : i(42) {}
+};
+
+constexpr A a;
+SA((a.i == 42));
+
+struct B
+{
+ struct {
+ int h;
+ struct {
+ union {
+ unsigned char i;
+ int j;
+ };
+ int k;
+ }; // { dg-warning "anonymous struct" }
+ }; // { dg-warning "anonymous struct" }
+ int l;
+
+ constexpr B(): h(1), i(2), k(3), l(4) {}
+};
+
+constexpr B b;
+SA((b.h == 1 && b.i == 2 && b.k == 3 && b.l == 4));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C
new file mode 100644
index 0000000..e8e7de3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C
@@ -0,0 +1,27 @@
+// Core issue 898
+// { dg-do compile { target c++11 } }
+
+namespace N { const int i = 42; }
+namespace M { const int j = 42; }
+
+constexpr int g() {
+ using namespace N;
+ using M::j;
+ static_assert (i == 42, "i == 42");
+ return i + j;
+}
+
+template <class T>
+constexpr int h() {
+ using namespace N;
+ using M::j;
+ static_assert (i == 42, "i == 42");
+ return i + j;
+}
+
+constexpr int i = g();
+constexpr int i2 = h<int>();
+
+static_assert (i == 84, "i == 84");
+static_assert (i2 == 84, "i2 == 84");
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C
new file mode 100644
index 0000000..59a65e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C
@@ -0,0 +1,18 @@
+// PR c++/49520
+// { dg-do compile { target c++11 } }
+
+namespace x { void foo(); }
+
+template<typename T>
+struct traits
+{
+ static constexpr bool f() { return true; }
+
+ static constexpr bool g()
+ {
+ using x::foo;
+ return f() && noexcept(foo());
+ }
+};
+
+template struct traits<int>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value.C
new file mode 100644
index 0000000..8731187
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+struct HopefullyLiteral {
+ HopefullyLiteral() = default; // Should be a constexpr c'tor as of 12.1/6 and 8.4.2/4
+};
+
+constexpr HopefullyLiteral var1{}; // OK
+constexpr HopefullyLiteral var2 = HopefullyLiteral{}; // #1
+constexpr HopefullyLiteral var3 = HopefullyLiteral(); // #2
+constexpr HopefullyLiteral var4 = HopefullyLiteral(var3); // #3
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value2.C
new file mode 100644
index 0000000..00797fa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value2.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+constexpr T value_init() { return T(); }
+
+template<class T>
+constexpr inline T bar(T x) { return x; }
+
+union EmptyUnion {};
+union Union1 { int i; };
+union Union3 { double d; int i; char* c; };
+
+constexpr auto u1 = value_init<EmptyUnion>();
+constexpr auto u2 = value_init<Union1>();
+constexpr auto u3 = value_init<Union3>();
+constexpr auto u4 = bar(EmptyUnion{});
+constexpr auto u5 = bar(Union1{});
+constexpr auto u6 = bar(Union3{});
+constexpr auto u7 = bar(u1);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C
new file mode 100644
index 0000000..8fd9c74
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value3.C
@@ -0,0 +1,10 @@
+// PR c++/50234
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert((X),#X)
+
+struct A { int i; };
+
+constexpr int f(A a) { return a.i; }
+
+SA(f({}) == 0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value4.C
new file mode 100644
index 0000000..1fc3738
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-value4.C
@@ -0,0 +1,16 @@
+// PR c++/57901
+// { dg-require-effective-target c++11 }
+
+struct Z {
+ Z() = default;
+ Z(Z const&) = default;
+ constexpr Z(Z&&) {} /* non-trivial (constexpr) move ctor */
+};
+
+template<typename T>
+constexpr int fn0(T v) { return 0; }
+template<typename T>
+constexpr int fn (T v) { return fn0(v); }
+
+constexpr auto t0 = fn0(Z()); // OK!
+constexpr auto t = fn (Z()); // error! (GCC 4.8.1)
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-variadic.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-variadic.C
new file mode 100644
index 0000000..495c6e2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-variadic.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<class... T>
+constexpr bool variadics(T&&...) { return true; }
+
+struct IsLiteral {};
+
+constexpr bool variadic_var = variadics(0, true, 1.2, IsLiteral{}); // Error, so below
+
+int main() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual.C
new file mode 100644
index 0000000..2c13e3e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual.C
@@ -0,0 +1,14 @@
+// PR c++/47067
+// { dg-do compile { target c++11 } }
+
+struct X {
+ virtual void x();
+ virtual ~X();
+};
+
+struct Y {
+ virtual void y();
+ virtual ~Y();
+};
+
+struct Z: X, Y {} z;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C
new file mode 100644
index 0000000..86040a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C
@@ -0,0 +1,24 @@
+// PR c++/54341
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct enable_shared_from_this
+{
+ constexpr enable_shared_from_this(); // { dg-warning "used but never defined" }
+
+private:
+ int mem;
+};
+
+class VTableClass {
+public:
+ virtual void someVirtualMethod() { }
+};
+
+class SomeClass : public enable_shared_from_this< SomeClass >, public
+VTableClass { };
+
+SomeClass* createInstance()
+{
+ return new SomeClass;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual3.C
new file mode 100644
index 0000000..de446bc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual3.C
@@ -0,0 +1,42 @@
+// PR c++/54253
+// { dg-do compile { target c++11 } }
+
+namespace A {
+ class Base {
+ int x;
+ public:
+ constexpr Base(int x) : x(x) {}
+ };
+
+ class Base2 {
+ public:
+ virtual void fun() {}
+ };
+
+ class Derived : public Base2, public Base {
+ public:
+ constexpr Derived() : Base2(), Base(5) {}
+ };
+
+ constexpr Derived der;
+}
+
+namespace B {
+ class Base {
+ int x;
+ public:
+ constexpr Base() : x(5) {}
+ };
+
+ class Base2 {
+ public:
+ virtual void fun() {}
+ };
+
+ class Derived : public Base, public Base2 {
+ public:
+ constexpr Derived() {}
+ };
+
+ constexpr Derived der;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C
new file mode 100644
index 0000000..b938d65
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C
@@ -0,0 +1,18 @@
+// PR c++/56291
+// { dg-do compile { target c++11 } }
+
+class Base
+{
+public:
+ constexpr Base() : v(1) {};
+ int v;
+};
+
+class Derived : public Base
+{
+public:
+ constexpr Derived() : Base() {};
+ virtual void function();
+};
+
+Derived d;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C
new file mode 100644
index 0000000..dc1b708
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C
@@ -0,0 +1,33 @@
+// PR c++/48570
+// { dg-do run { target c++11 } }
+
+extern "C" void abort ();
+constexpr wchar_t foo (int i) { return L"0123"[i]; }
+constexpr char16_t bar (int i) { return u"0123"[i]; }
+constexpr char32_t baz (int i) { return U"0123"[i]; }
+const wchar_t foo0 = foo (0);
+const wchar_t foo1 = foo (1);
+const wchar_t foo2 = foo (2);
+const wchar_t foo3 = foo (3);
+const wchar_t foo4 = foo (4);
+const char16_t bar0 = bar (0);
+const char16_t bar1 = bar (1);
+const char16_t bar2 = bar (2);
+const char16_t bar3 = bar (3);
+const char16_t bar4 = bar (4);
+const char32_t baz0 = baz (0);
+const char32_t baz1 = baz (1);
+const char32_t baz2 = baz (2);
+const char32_t baz3 = baz (3);
+const char32_t baz4 = baz (4);
+
+int
+main ()
+{
+ if (foo0 != L'0' || foo1 != L'1' || foo2 != L'2' || foo3 != L'3' || foo4 != L'\0')
+ abort ();
+ if (bar0 != u'0' || bar1 != u'1' || bar2 != u'2' || bar3 != u'3' || bar4 != u'\0')
+ abort ();
+ if (baz0 != U'0' || baz1 != U'1' || baz2 != U'2' || baz3 != U'3' || baz4 != U'\0')
+ abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
new file mode 100644
index 0000000..db79a9c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
@@ -0,0 +1,6 @@
+// PR c++/48570
+// { dg-do compile { target c++11 } }
+
+constexpr wchar_t c1 = L"hi"[3]; // { dg-error "out of bound" }
+constexpr char16_t c2 = u"hi"[3]; // { dg-error "out of bound" }
+constexpr char32_t c3 = U"hi"[3]; // { dg-error "out of bound" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc1.C
new file mode 100644
index 0000000..e7ccb64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc1.C
@@ -0,0 +1,42 @@
+// { dg-do compile { target c++11 } }
+
+struct B {
+ int i;
+ B (int _i) : i(_i) { }
+ ~B () { i = 0; }
+};
+
+struct A : public B {
+ A () : B(-1) { }
+ A (int i) : A() { }
+ A (double b) : A(static_cast<int>(b)) { }
+ A (double b, double b2) : A(b2) { }
+ ~A () { }
+};
+
+void f_A () { A a(2.0, 3.0); }
+
+struct C {
+ C () { }
+ virtual ~C() { }
+ virtual int f () = 0;
+};
+
+struct D : public C {
+ int i;
+ D (int _i) : C(), i(_i) { }
+ D () : D(-1) { }
+ virtual ~D() { }
+ virtual int f () { }
+};
+
+void f_D () { C* c = new D(); }
+
+template <typename T>
+struct E {
+ T t;
+ E () : E(T()) { }
+ E (T _t) : t(_t) { }
+};
+
+void f_E () { E<int> e; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc2.C
new file mode 100644
index 0000000..665f79d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc2.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+
+struct A {
+ int i, j;
+ A () : A(0), j(0) { } // { dg-error "constructor delegation" }
+ A (int _i) : i(_i) { }
+};
+
+struct B {
+ int i, j;
+ B () : i(0), B(0) { } // { dg-error "constructor delegation" }
+ B (int _j) : j(_j) { }
+
+};
+
+struct C {};
+
+struct D : public C {
+ D () : C() { }
+ D (float) : D(), C() { } // { dg-error "constructor delegation" }
+ D (float, float): C(), D() { } // { dg-error "constructor delegation" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C
new file mode 100644
index 0000000..9c6fd56
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc3.C
@@ -0,0 +1,62 @@
+// { dg-do compile { target c++11 } }
+
+struct X {};
+
+struct B {
+ int i;
+ B (int _i) : i(_i) { }
+ ~B () { i = 0; }
+};
+
+template <typename T>
+struct A : public B {
+ A () : B(-1) { }
+ ~A () { }
+};
+
+template <typename T>
+struct A<T*> : public B {
+ A () : B(-1) { }
+ A (int i) : A() { }
+ A (double b) : A(static_cast<int>(b)) { }
+ A (double b, double b2) : A(b2) { }
+ ~A () { }
+};
+
+void f_A () { A<X*> a(2.0, 3.0); }
+
+struct C {
+ C () { }
+ virtual ~C() { }
+ virtual int f () = 0;
+};
+
+template <typename T>
+struct D : public C {
+ int i;
+ D (int _i) : C(), i(_i) { }
+};
+
+template <>
+struct D<X> : public C {
+ int i;
+ D (int _i) : C(), i(_i) { }
+ D () : D(-1) { }
+ virtual ~D() { }
+ virtual int f () { }
+};
+
+void f_D () { D<X>* d = new D<X>(); }
+
+template <typename T>
+struct E {
+};
+
+template <>
+struct E<int> {
+ int i;
+ E () : E(0) { }
+ E (int _i) : i(_i) { }
+};
+
+void f_E () { E<int> e; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc4.C
new file mode 100644
index 0000000..634b549
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc4.C
@@ -0,0 +1,7 @@
+// { dg-do compile }
+// { dg-options "--std=c++98" }
+
+struct X {
+ X() {}
+ X(int) : X() {} // { dg-warning "delegating constructors" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc5.C
new file mode 100644
index 0000000..5732162
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc5.C
@@ -0,0 +1,27 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+int count = 0;
+struct VB
+{
+ VB() {++count;}
+};
+
+struct B : virtual VB
+{
+ B() : B(42) {}
+ B(int) {}
+};
+
+struct D : B
+{
+ D() {}
+ D(int) : D() {}
+};
+
+int main()
+{
+ D d{42};
+ assert(count == 1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc6.C
new file mode 100644
index 0000000..b16c0b4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc6.C
@@ -0,0 +1,40 @@
+// { dg-do run { target c++11 } }
+
+int a_ct;
+
+struct A
+{
+ A(int i): i(i) { ++a_ct; }
+ A(const A& a): i(a.i) { ++a_ct; }
+ ~A() { --a_ct; }
+ int i;
+};
+
+struct V
+{
+ V() { }
+};
+
+struct B: virtual V
+{
+ A a;
+ B(A a): a(a) { }
+ B(int i): B(A(i)) { }
+};
+
+struct C: B
+{
+ C(int i): B(i) { }
+};
+
+int main()
+{
+ {
+ B b(42);
+ C c(24);
+ if (b.a.i != 42
+ ||c.a.i != 24)
+ __builtin_abort ();
+ }
+ return a_ct;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc7.C
new file mode 100644
index 0000000..e48741e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc7.C
@@ -0,0 +1,7 @@
+// PR c++/58255
+// { dg-do compile { target c++11 } }
+
+struct A {
+ explicit A() { }
+ A(int x) : A() { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc8.C
new file mode 100644
index 0000000..e483f3e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dc8.C
@@ -0,0 +1,66 @@
+// PR c++/51424
+// { dg-do compile { target c++11 } }
+
+template <class T >
+struct S
+{
+ S() : S() {} // { dg-error "delegates to itself" }
+ S(int x) : S(x) {} // { dg-error "delegates to itself" }
+};
+
+struct B1
+{
+ B1() : B1() {} // { dg-error "delegates to itself" }
+ B1(int y) : B1(y) {} // { dg-error "delegates to itself" }
+};
+
+struct V1 : virtual B1
+{
+ V1() : B1() {}
+ V1(int x) : B1(x) {}
+};
+
+struct B2
+{
+ B2() : B2() {} // { dg-error "delegates to itself" }
+ B2(int y) : B2(y) {} // { dg-error "delegates to itself" }
+};
+
+struct V2 : virtual B2
+{
+ V2() : V2() {} // { dg-error "delegates to itself" }
+ V2(int x) : V2(x) {} // { dg-error "delegates to itself" }
+};
+
+struct B3
+{
+ B3() {}
+ B3(int y) {}
+};
+
+struct V3 : virtual B3
+{
+ V3() : V3() {} // { dg-error "delegates to itself" }
+ V3(int x) : V3(x) {} // { dg-error "delegates to itself" }
+};
+
+struct CE1
+{
+ constexpr CE1() : CE1() {} // { dg-error "delegates to itself" }
+ constexpr CE1(int x) : CE1(x) {} // { dg-error "delegates to itself" }
+};
+
+struct CEB2
+{
+ constexpr CEB2() : CEB2() {} // { dg-error "delegates to itself" }
+ constexpr CEB2(int x) : CEB2(x) {} // { dg-error "delegates to itself" }
+};
+
+struct CE2 : CEB2
+{
+ constexpr CE2() : CEB2() {}
+ constexpr CE2(int x) : CEB2(x) {}
+};
+
+S<int> s1;
+S<int> s2(1);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C
new file mode 100644
index 0000000..f9c879e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C
@@ -0,0 +1,11 @@
+// Core 1212
+// { dg-do compile { target c++11 } }
+
+template <class T, class U> struct assert_same_type;
+template <class T> struct assert_same_type<T,T> {};
+
+int main()
+{
+ int i;
+ assert_same_type<int&&,decltype(static_cast<int&&>(i))>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33837.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33837.C
new file mode 100644
index 0000000..fbbc6a1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33837.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// PR c++/33837
+void foo()
+{
+ __decltype (A::foo()); // { dg-error "was not declared|expected" }
+ __decltype (B); // { dg-error "was not declared" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33838.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33838.C
new file mode 100644
index 0000000..effe08d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-33838.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+// PR c++/33838
+template<typename T> struct A
+{
+ __decltype (T* foo()); // { dg-error "expected|no arguments|accept" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-38655.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-38655.C
new file mode 100644
index 0000000..3b8455b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-38655.C
@@ -0,0 +1,4 @@
+// PR c++/38655
+// { dg-options "" }
+
+__decltype(0r)* p = 1; // { dg-error "not supported|invalid" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C
new file mode 100644
index 0000000..4b81b5a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-54581.C
@@ -0,0 +1,28 @@
+/* { dg-do compile { target c++11 } } */
+/* { dg-options "-Wall" } */
+
+typedef float v4f __attribute__((vector_size(4*sizeof(float))));
+
+template <class T> void eat (T&&) {}
+
+void test1 ()
+{
+ v4f x = {0,1,2,3};
+ typedef decltype (x < x) v4i;
+ v4i y = {4,5,6,7}; // v4i is not opaque
+ eat (y);
+}
+
+template<class V>
+void test2 ()
+{
+ V x = {0,1,2,3};
+ typedef decltype (x < x) v4i;
+ v4i y = {4,5,6,7}; // v4i is not opaque
+ eat (y);
+}
+
+int main(){
+ test1();
+ test2<v4f>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C
new file mode 100644
index 0000000..2616bb0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C
@@ -0,0 +1,32 @@
+// PR c++/52748
+// N3276
+// { dg-do compile { target c++11 } }
+
+struct A; // { dg-error "forward declaration" }
+A f();
+
+decltype(f()) g1(); // OK
+decltype(((f()))) g2b(); // OK
+decltype(42,f()) g3(); // OK
+decltype(42,45,f()) g3b(); // OK
+decltype(42,45,(f())) g3c(); // OK
+decltype(42,((45,(f())))) g3c(); // OK
+
+decltype(f(),42) g4(); // { dg-error "" }
+decltype(45,f(),42) g4b(); // { dg-error "" }
+
+class B
+{
+ ~B(); // { dg-error "private" }
+public:
+ int i;
+ void operator[](int);
+};
+B h();
+
+void i(const B&);
+
+decltype(h()) g5a(); // OK
+decltype(h().i) g5(); // { dg-error "" }
+decltype(h()[0]) g6(); // { dg-error "" }
+decltype(i(h())) g7(); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call2.C
new file mode 100644
index 0000000..ad23220
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call2.C
@@ -0,0 +1,7 @@
+// PR c++/52748
+// We don't want to instantiate A<T> here.
+// { dg-require-effective-target c++11 }
+
+template <class T> struct A: T { };
+template <class T> A<T> f(T);
+decltype(f(42)) *p;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C
new file mode 100644
index 0000000..27797a2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C
@@ -0,0 +1,132 @@
+// Testcase for N3276 and operator overloading
+// { dg-require-effective-target c++11 }
+
+struct A;
+struct B {
+ A operator()(int);
+ A operator[](int);
+ A operator=(int);
+ A operator+=(int);
+ A operator-=(int);
+ A operator*=(int);
+ A operator/=(int);
+ A operator^=(int);
+ A operator&=(int);
+ A operator|=(int);
+ A operator<<=(int);
+ A operator>>=(int);
+};
+
+A operator-(B);
+A operator+(B);
+A operator*(B);
+A operator&(B);
+A operator!(B);
+A operator~(B);
+A operator++(B);
+A operator--(B);
+
+A operator+(B,B);
+A operator-(B,B);
+A operator*(B,B);
+A operator/(B,B);
+A operator%(B,B);
+A operator^(B,B);
+A operator&(B,B);
+A operator|(B,B);
+A operator<(B,B);
+A operator>(B,B);
+A operator,(B,B);
+A operator<<(B,B);
+A operator>>(B,B);
+A operator==(B,B);
+A operator->*(B,B);
+
+#define TRY(E) static_cast<decltype(E)*>(0)
+
+template <class B>
+void f()
+{
+ B b;
+ TRY(b(0));
+ TRY(b[0]);
+ TRY(b=0);
+ TRY(b+=0);
+ TRY(b-=0);
+ TRY(b*=0);
+ TRY(b/=0);
+ TRY(b^=0);
+ TRY(b&=0);
+ TRY(b|=0);
+ TRY(b<<=0);
+ TRY(b>>=0);
+
+ TRY(-b);
+ TRY(+b);
+ TRY(*b);
+ TRY(&b);
+ TRY(!b);
+ TRY(~b);
+ TRY(++b);
+ TRY(--b);
+
+ TRY(b+b);
+ TRY(b-b);
+ TRY(b*b);
+ TRY(b/b);
+ TRY(b%b);
+ TRY(b^b);
+ TRY(b&b);
+ TRY(b|b);
+ TRY(b>b);
+ TRY(b<b);
+ TRY((b,b));
+ TRY(b<<b);
+ TRY(b>>b);
+ TRY(b==b);
+ TRY(b->*b);
+}
+
+int main()
+{
+ B b;
+ TRY(b(0));
+ TRY(b[0]);
+ TRY(b=0);
+ TRY(b+=0);
+ TRY(b-=0);
+ TRY(b*=0);
+ TRY(b/=0);
+ TRY(b^=0);
+ TRY(b&=0);
+ TRY(b|=0);
+ TRY(b<<=0);
+ TRY(b>>=0);
+
+ TRY(-b);
+ TRY(+b);
+ TRY(*b);
+ TRY(&b);
+ TRY(!b);
+ TRY(~b);
+ TRY(++b);
+ TRY(--b);
+
+ TRY(b+b);
+ TRY(b-b);
+ TRY(b*b);
+ TRY(b/b);
+ TRY(b%b);
+ TRY(b^b);
+ TRY(b&b);
+ TRY(b|b);
+ TRY(b>b);
+ TRY(b<b);
+ TRY((b,b));
+ TRY(b<<b);
+ TRY(b>>b);
+ TRY(b==b);
+ TRY(b->*b);
+
+ f<B>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C
new file mode 100644
index 0000000..f46d0ba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C
@@ -0,0 +1,9 @@
+// PR c++/59270
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ struct B b; // { dg-error "incomplete type" }
+};
+
+decltype(A()) a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-refbug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-refbug.C
new file mode 100644
index 0000000..cecff3c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype-refbug.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+// PR c++/33045
+int && f ();
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+static_assert(is_same<decltype(f()), int&&>::value, "decltype of rvalue reference");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype1.C
new file mode 100644
index 0000000..84c7a03
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype1.C
@@ -0,0 +1,27 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+const int& foo();
+int i;
+struct A { double x; };
+const A* a = new A();
+
+static_assert(is_same<decltype(foo()), const int&>::value,
+ "type should be const int&");
+static_assert(is_same<decltype(i), int>::value,
+ "type should be int");
+static_assert(is_same<decltype(a->x), double>::value,
+ "type should be double");
+static_assert(is_same<decltype((a->x)), const double&>::value,
+ "type should be const double&");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype10.C
new file mode 100644
index 0000000..846d0bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype10.C
@@ -0,0 +1,9 @@
+// PR c++/34271
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+ static int i;
+};
+
+template<int N> int A<N>::i(decltype (A::i; // { dg-error "expected primary-expression before" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype11.C
new file mode 100644
index 0000000..9fa8e23
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype11.C
@@ -0,0 +1,12 @@
+// PR c++/35316
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+ int i : 2;
+
+ void foo()
+ {
+ decltype(i) j;
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype12.C
new file mode 100644
index 0000000..eae318d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype12.C
@@ -0,0 +1,37 @@
+// { dg-do compile { target c++11 } }
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+int&& f(const int&) {}
+int&& (*fp)(const int&) = f;
+int&& (&fr)(const int&) = f;
+
+struct X { int&& f(const int&); };
+
+int&& (X::*mfp)(const int&) = &X::f;
+
+void g(X& xr, X* xp)
+{
+ int i;
+ static_assert(is_same<decltype(f(i)), int&&>::value, "direct call");
+ static_assert(is_same<decltype(fp(i)), int&&>::value, "pointer");
+ static_assert(is_same<decltype((*fp)(i)), int&&>::value,
+ "dereferenced pointer");
+ static_assert(is_same<decltype(fr(i)), int&&>::value,
+ "reference");
+ static_assert(is_same<decltype(xr.f(i)), int&&>::value,
+ "member function call");
+ static_assert(is_same<decltype((xr.*mfp)(i)), int&&>::value,
+ "member function pointer with .*");
+ static_assert(is_same<decltype((xp->*mfp)(i)), int&&>::value,
+ "member function pointer with ->*");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype13.C
new file mode 100644
index 0000000..8e6c6d2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype13.C
@@ -0,0 +1,38 @@
+// PR c++/34269
+// { dg-do compile }
+
+void
+f1 ()
+{
+ __decltype; // { dg-error "expected" }
+}
+
+void
+f2 ()
+{
+ __decltype (; // { dg-error "expected" }
+}
+
+void
+f3 ()
+{
+ __decltype (); // { dg-error "expected" }
+}
+
+void
+f4 ()
+{
+ __typeof__; // { dg-error "expected" }
+}
+
+void
+f5 ()
+{
+ __typeof__ (; // { dg-error "expected" }
+}
+
+void
+f6 ()
+{
+ __typeof__ (); // { dg-error "expected" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype14.C
new file mode 100644
index 0000000..9484173
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype14.C
@@ -0,0 +1,17 @@
+// PR c++/37540
+
+struct A
+{
+ int g() {return 0;}
+};
+
+template <typename T_>
+void f(A a)
+{
+ __decltype(a.g()) i;
+}
+
+int main()
+{
+ f<int>(A());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype15.C
new file mode 100644
index 0000000..f19819c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype15.C
@@ -0,0 +1,12 @@
+// PR c++/38640
+// { dg-do compile { target c++11 } }
+
+template<int N> void foo (decltype (N));
+template<long int N> void foo (decltype (N));
+
+void
+bar (void)
+{
+ foo<5> (6);
+ foo<5L> (6L);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype16.C
new file mode 100644
index 0000000..5cf8439
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype16.C
@@ -0,0 +1,10 @@
+// PR c++/39070
+// { dg-do compile { target c++11 } }
+
+template<typename X> struct junk {
+ template<typename Z> static Z y();
+ template<typename Y> static int test(...);
+ template<typename Y> static char test(decltype(y<Y>())*);
+ static int const value=sizeof(test<X>(0));
+};
+typedef char type[junk<int>::value==sizeof(char) ? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype17.C
new file mode 100644
index 0000000..6e5854d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype17.C
@@ -0,0 +1,28 @@
+// PR c++/36628
+// { dg-do run { target c++11 } }
+
+#include <typeinfo>
+#include <string.h>
+
+int rvalue();
+int& lvalueref();
+int&& rvalueref();
+
+decltype(true ? rvalue() : rvalue()) f()
+{}
+
+decltype(true ? lvalueref() : lvalueref()) g()
+{}
+
+decltype(true ? rvalueref() : rvalueref()) h()
+{}
+
+int main()
+{
+ if (strcmp (typeid(f).name(), "FivE") != 0)
+ return 1;
+ if (strcmp (typeid(g).name(), "FRivE") != 0)
+ return 2;
+ if (strcmp (typeid(h).name(), "FOivE") != 0)
+ return 3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype18.C
new file mode 100644
index 0000000..4c1571a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype18.C
@@ -0,0 +1,5 @@
+// PR c++/37875
+// { dg-do compile { target c++11 } }
+
+template <typename> struct X {};
+X<decltype(1 > 2)> x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype19.C
new file mode 100644
index 0000000..41d602f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype19.C
@@ -0,0 +1,24 @@
+// PR c++/42013
+
+template<typename _Tp>
+ _Tp
+__attribute ((const)) declval();
+
+template<typename _Tp, typename _Up>
+ struct common_type
+ {
+ typedef __decltype(true ? declval<_Tp>() : declval<_Up>()) typet;
+ typedef __decltype(false ? declval<_Tp>() : declval<_Up>()) typef;
+ };
+
+template<typename, typename> struct is_same;
+
+template<typename _Tp> struct is_same<_Tp, _Tp> { typedef _Tp type; };
+
+void f()
+{
+ typedef common_type<int, const int>::typet typet;
+ typedef common_type<int, const int>::typef typef;
+
+ typedef is_same<typet, typef>::type type;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype2.C
new file mode 100644
index 0000000..f316f50
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype2.C
@@ -0,0 +1,58 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+#define CHECK_DECLTYPE(DECLTYPE,RESULT) \
+ static_assert(is_same< DECLTYPE , RESULT >::value, #RESULT)
+
+struct A {};
+
+int a;
+int& b = a;
+const int& c = a;
+const int d = 5;
+const A e = A();
+CHECK_DECLTYPE(decltype(a), int);
+CHECK_DECLTYPE(decltype(b), int&);
+CHECK_DECLTYPE(decltype(c), const int&);
+CHECK_DECLTYPE(decltype(d), const int);
+CHECK_DECLTYPE(decltype(e), const A);
+
+CHECK_DECLTYPE(decltype(a), int);
+CHECK_DECLTYPE(decltype((a)), int&);
+
+void foo_check(int a, int& b, float& c, int* d)
+{
+ CHECK_DECLTYPE(decltype(a), int);
+ CHECK_DECLTYPE(decltype(b), int&);
+ CHECK_DECLTYPE(decltype(c), float&);
+ CHECK_DECLTYPE(decltype(d), int*);
+}
+
+int foo(char);
+int bar(char);
+int bar(int);
+CHECK_DECLTYPE(decltype(foo), int(char));
+
+decltype(bar) z; // { dg-error "overload" "overload" }
+// { dg-error "invalid type" "invalid" { target *-*-* } 47 }
+
+CHECK_DECLTYPE(decltype(&foo), int(*)(char));
+CHECK_DECLTYPE(decltype(*&foo), int(&)(char));
+
+void array_types()
+{
+ int a[10];
+ CHECK_DECLTYPE(decltype(a), int[10]);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype20.C
new file mode 100644
index 0000000..5fb3540
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype20.C
@@ -0,0 +1,10 @@
+// PR c++/42277
+// { dg-do compile { target c++11 } }
+
+struct S { int s; };
+template <int N>
+void foo ()
+{
+ S s;
+ decltype (s.s) i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype21.C
new file mode 100644
index 0000000..e4dc201
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype21.C
@@ -0,0 +1,34 @@
+// PR c++/6709 (DR 743)
+// PR c++/42603 (DR 950)
+// { dg-do compile { target c++11 } }
+
+template <class T>
+T make();
+
+struct p { typedef int t; };
+struct c : decltype(make<p>()) {};
+
+decltype(make<p>())::t t;
+
+// PR c++/49823
+
+template < typename T >
+auto f( const T &x )
+ -> typename decltype( x )::type; // ICE on here
+
+template < typename T >
+typename decltype( T{} )::type // ICE on here
+f( T );
+
+template < typename T >
+void f( T x )
+{ typename decltype( x )::type t; } // ICE on here
+
+// Negative tests
+
+int f();
+decltype(f())::t t2; // { dg-error "not a class" }
+
+struct D: decltype(f()) { }; // { dg-error "not a class" }
+
+// { dg-prune-output "expected initializer" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype22.C
new file mode 100644
index 0000000..b3ff8b8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype22.C
@@ -0,0 +1,13 @@
+// PR c++/42761
+// { dg-do compile { target c++11 } }
+
+template<typename _Tp> _Tp* fn();
+
+template <class T> struct A
+{
+ template <class U,
+ class S = decltype(fn<T>())>
+ struct B { };
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype23.C
new file mode 100644
index 0000000..731eed7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype23.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+int x, &&y = static_cast<int &&>(x);
+typedef decltype((y)) myInt; // `y' is a parenthesized id-expression of type int that is an lvalue
+typedef int &myInt;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype24.C
new file mode 100644
index 0000000..0ff9963
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype24.C
@@ -0,0 +1,7 @@
+// PR c++/47068
+// { dg-do compile { target c++11 } }
+
+template <class T> struct broken {
+ int member;
+ typedef decltype(~ member) gcc_crashes_here;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype25.C
new file mode 100644
index 0000000..e57376f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype25.C
@@ -0,0 +1,20 @@
+// PR c++/47851
+// { dg-do compile { target c++11 } }
+
+struct Type {
+ void display_type();
+ void display_type() const { }
+};
+
+typedef Type const ConstType;
+
+struct ConvertibleToType {
+ operator Type&() { return *reinterpret_cast<Type*>(this); }
+};
+
+int main ()
+{
+ // Both lines should call the const variant.
+ (true ? ConvertibleToType() : ConstType()).display_type();
+ decltype((true ? ConvertibleToType() : ConstType()))().display_type();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype26.C
new file mode 100644
index 0000000..0d320da
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype26.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+struct A { };
+
+template <class T>
+decltype(f(T())) f(T t) // { dg-error "depth" }
+{
+ return f(t);
+}
+
+int main()
+{
+ f(A()); // { dg-error "no match" }
+}
+
+// { dg-prune-output "note" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype27.C
new file mode 100644
index 0000000..3174a89
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype27.C
@@ -0,0 +1,9 @@
+// PR c++/48617
+// { dg-do compile { target c++11 } }
+
+template<class T, decltype(T())> // #
+struct A {};
+
+A<int, 0> a;
+
+int main() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype28.C
new file mode 100644
index 0000000..c1c5a1b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype28.C
@@ -0,0 +1,16 @@
+// PR c++/44175
+// { dg-do compile { target c++11 } }
+
+template <bool, class T> struct enable_if { };
+template <class T> struct enable_if <true, T> { typedef T type; };
+
+template <class F, int N>
+void ft (F f, typename enable_if<N!=0, int>::type) {}
+
+template< class F, int N >
+decltype(ft<F, N-1> (F(), 0)) // { dg-error "depth" }
+ft (F f, typename enable_if<N==0, int>::type) {}
+
+int main() {
+ ft<struct a*, 2> (0, 0); // { dg-message "from here" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype29.C
new file mode 100644
index 0000000..d87299c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype29.C
@@ -0,0 +1,19 @@
+// PR c++/44175
+// { dg-do compile { target c++11 } }
+
+template <bool, class T> struct enable_if { };
+template <class T> struct enable_if <true, T> { typedef T type; };
+
+template <int x>
+typename enable_if<x==0,int>::type
+ft() {}
+
+template<class F, int N>
+decltype (ft<F> (F())) // { dg-error "depth" }
+ft() {}
+
+int main() {
+ ft<struct a*, 0>(); // { dg-error "no match|wrong number" }
+}
+
+// { dg-prune-output "note" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype3.C
new file mode 100644
index 0000000..aaff5df
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype3.C
@@ -0,0 +1,71 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+#define CHECK_DECLTYPE(DECLTYPE,RESULT) \
+ static_assert(is_same< DECLTYPE , RESULT >::value, #DECLTYPE " should be " #RESULT)
+
+class A {
+public:
+ int a;
+ int& b;
+ static int c;
+
+ A(int& b) : b(b) { }
+
+ void foo() {
+ CHECK_DECLTYPE(decltype(a), int);
+ CHECK_DECLTYPE(decltype(this->a), int);
+ CHECK_DECLTYPE(decltype((*this).a), int);
+ CHECK_DECLTYPE(decltype(b), int&);
+ CHECK_DECLTYPE(decltype(c), int);
+ }
+ void bar() const {
+ CHECK_DECLTYPE(decltype(a), int);
+ CHECK_DECLTYPE(decltype(b), int&);
+ CHECK_DECLTYPE(decltype(c), int);
+ }
+};
+
+int b;
+A aa(b);
+const A& caa = aa;
+CHECK_DECLTYPE(decltype(aa.a), int);
+CHECK_DECLTYPE(decltype(aa.b), int&);
+CHECK_DECLTYPE(decltype(caa.a), int);
+
+class B {
+public:
+ int a;
+ enum B_enum { b };
+ decltype(a) c;
+ decltype(a) foo() { }
+ decltype(b) enums_are_in_scope() { return b; } // ok
+};
+
+CHECK_DECLTYPE(decltype(aa.*&A::a), int&);
+decltype(aa.*&A::b) zz; // { dg-error "cannot create pointer to reference member" "cannot" }
+// { dg-error "invalid type" "invalid type" { target *-*-* } 57 }
+CHECK_DECLTYPE(decltype(caa.*&A::a), const int&);
+
+class X {
+ void foo() {
+ CHECK_DECLTYPE(decltype(this), X*);
+ CHECK_DECLTYPE(decltype(*this), X&);
+ }
+ void bar() const {
+ CHECK_DECLTYPE(decltype(this), const X*);
+ CHECK_DECLTYPE(decltype(*this), const X&);
+ }
+};
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype30.C
new file mode 100644
index 0000000..25eeb9d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype30.C
@@ -0,0 +1,17 @@
+// PR c++/49369
+// { dg-do compile { target c++11 } }
+
+template <class,class> struct assert_same;
+template <class T> struct assert_same<T,T> {};
+
+struct B {
+ int member;
+};
+
+struct C: B {
+ void method() const;
+};
+
+void C::method() const {
+ assert_same<decltype((B::member)), const int&> a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype31.C
new file mode 100644
index 0000000..bffcf1c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype31.C
@@ -0,0 +1,13 @@
+// PR c++/49921
+// { dg-do compile { target c++11 } }
+
+struct Local
+{
+ void f();
+};
+
+Local *l;
+void (Local::*ptr)();
+decltype((l->*ptr)) i; // { dg-error "member function" }
+
+// { dg-prune-output "invalid type in declaration" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype32.C
new file mode 100644
index 0000000..02c6316
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype32.C
@@ -0,0 +1,13 @@
+// PR c++/50075
+// { dg-do compile { target c++11 } }
+// { dg-options "-ftemplate-depth=10" }
+
+template <typename T>
+auto make_array(const T& il) ->
+decltype(make_array(il)) // { dg-error "not declared|no matching|exceeds" }
+{ }
+
+int main()
+{
+ int z = make_array(1); // { dg-error "no matching" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype33.C
new file mode 100644
index 0000000..63d5a49
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype33.C
@@ -0,0 +1,19 @@
+// PR c++/50084
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-inline" }
+
+template<typename> struct remove_reference;
+template<typename T> struct remove_reference<T&> { typedef T type; };
+
+template <class T> void f(T) { }
+
+void g()
+{
+ struct { } * v = 0;
+
+ typedef remove_reference<decltype(*v)>::type at;
+
+ // The typedef should't assign the name "at" to the struct.
+ // { dg-final { scan-assembler "_Z1fIZ1gvEUt_EvT_" } }
+ f(at());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype34.C
new file mode 100644
index 0000000..028e506
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype34.C
@@ -0,0 +1,19 @@
+// PR c++/50870
+// { dg-do compile { target c++11 } }
+
+struct impl
+{
+ template <class T> static T create();
+};
+
+template<class T, class U,
+ class = decltype(impl::create<T>()->impl::create<U>())>
+struct tester{};
+
+tester<impl*, int> ti;
+
+template<class T, class U,
+ class = decltype(impl::create<T>()->impl::create<U>())>
+int test() { return 0; }
+
+int i = test<impl*, int>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype35.C
new file mode 100644
index 0000000..daffaf0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype35.C
@@ -0,0 +1,15 @@
+// PR c++/50870
+// { dg-do compile { target c++11 } }
+
+template <class V>
+ struct impl
+ {
+ template <class T> static T create();
+ };
+
+template <class T, class U, class V, class
+ = decltype(impl<V>::template create<T>()
+ -> impl<V>::template create<U>())>
+struct tester { };
+
+tester<impl<float>*, int, float> ti;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype36.C
new file mode 100644
index 0000000..c426f69
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype36.C
@@ -0,0 +1,21 @@
+// PR c++/51265
+// { dg-do compile { target c++11 } }
+
+struct Funny
+{
+ int print(int);
+};
+
+template<typename X>
+void c();
+
+template<typename X, X ff>
+void xx()
+{
+ c<decltype(ff)>();
+}
+
+int main()
+{
+ xx<int(Funny::*)(int), &Funny::print>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype37.C
new file mode 100644
index 0000000..c885e9a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype37.C
@@ -0,0 +1,14 @@
+// PR c++/53651
+// { dg-do compile { target c++11 } }
+
+template<typename> struct wrap { void bar(); };
+
+template<typename T> auto foo(T* t) -> wrap<T>* { return 0; }
+
+template<typename T>
+struct holder : decltype(*foo((T*)0)) // { dg-error "class type" }
+{
+ using decltype(*foo((T*)0))::bar; // { dg-error "is not a base" }
+};
+
+holder<int> h;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype38.C
new file mode 100644
index 0000000..97ebb33
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype38.C
@@ -0,0 +1,17 @@
+// PR c++/53498
+// { dg-do compile { target c++11 } }
+
+template<typename... Args>
+struct B
+{
+ template<typename U>
+ static
+ void b(const U& u, const Args&... args,
+ decltype(u.f(args...)) dummy)
+ {
+ }
+};
+
+int main() {
+ B<int> b;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype39.C
new file mode 100644
index 0000000..4676d2d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype39.C
@@ -0,0 +1,19 @@
+// PR c++/53788
+// { dg-do compile { target c++11 } }
+
+struct t { static const bool value = true; };
+struct f { static const bool value = false; };
+
+template<typename T>
+struct has_static {
+ template<typename X>
+ static t check(X*, decltype(T::fun())* = 0); // { dg-error "without object" }
+ static f check(...);
+
+ typedef decltype(check((T*)(0))) ret;
+ static const bool value = ret::value;
+};
+
+struct test { int fun() { return 0; } };
+
+bool b = has_static<test>::value;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype4.C
new file mode 100644
index 0000000..c14e156
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype4.C
@@ -0,0 +1,82 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+#define CHECK_DECLTYPE(DECLTYPE,RESULT) \
+ static_assert(is_same< DECLTYPE , RESULT >::value, #DECLTYPE " should be " #RESULT)
+
+struct A {
+ int x;
+ int& y;
+ int foo(char);
+ int& bar() const;
+};
+
+CHECK_DECLTYPE(decltype(&A::x), int A::*);
+decltype(&A::y) Ay; // { dg-error "cannot create pointer to reference member|invalid type" }
+CHECK_DECLTYPE(decltype(&A::foo), int (A::*) (char));
+CHECK_DECLTYPE(decltype(&A::bar), int& (A::*) () const);
+
+CHECK_DECLTYPE(decltype("decltype"), const char(&)[9]);
+CHECK_DECLTYPE(decltype(1), int);
+
+int an_int = 5;
+int& i = an_int;
+const int j = an_int;
+
+CHECK_DECLTYPE(decltype(i)&, int&);
+CHECK_DECLTYPE(const decltype(j), const int);
+
+int foo();
+CHECK_DECLTYPE(decltype(foo()), int);
+float& bar(int);
+CHECK_DECLTYPE(decltype (bar(1)), float&);
+const A bar();
+CHECK_DECLTYPE(decltype (bar()), const A);
+const A& bar2();
+CHECK_DECLTYPE(decltype (bar2()), const A&);
+
+void wibble() {
+ CHECK_DECLTYPE(decltype(1+2), int);
+ int* p;
+ CHECK_DECLTYPE(decltype(*p), int&);
+ int a[10];
+ CHECK_DECLTYPE(decltype(a[3]), int&);
+ int i; int& j = i;
+ CHECK_DECLTYPE(decltype (i = 5), int&);
+ CHECK_DECLTYPE(decltype (j = 5), int&);
+
+ CHECK_DECLTYPE(decltype (++i), int&);
+ CHECK_DECLTYPE(decltype (i++), int);
+}
+
+struct B {
+ B () : bit(), cbit() {}
+ int bit : 2;
+ const int cbit : 3;
+
+ void foo()
+ {
+ CHECK_DECLTYPE(decltype(bit), int);
+ CHECK_DECLTYPE(decltype((bit)), int&);
+ CHECK_DECLTYPE(decltype(cbit), const int);
+ CHECK_DECLTYPE(decltype((cbit)), const int&);
+ }
+};
+
+B b;
+const B& bc = b;
+CHECK_DECLTYPE(decltype(b.bit), int);
+CHECK_DECLTYPE(decltype(bc.bit), int);
+CHECK_DECLTYPE(decltype((b.bit)), int&);
+CHECK_DECLTYPE(decltype((bc.bit)), const int&);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype40.C
new file mode 100644
index 0000000..1b194ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype40.C
@@ -0,0 +1,101 @@
+// PR c++/51222
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct add_rref {
+ typedef T&& type;
+};
+
+template<>
+struct add_rref<void> {
+ typedef void type;
+};
+
+template<class T>
+typename add_rref<T>::type declval();
+
+template<class T, class U, class =
+ decltype(::delete ::new T(declval<U>()))
+>
+auto f(int) -> char;
+
+template<class, class>
+auto f(...) -> char(&)[2];
+
+template<class T, class =
+ decltype(::delete ::new T())
+>
+auto g(int) -> char;
+
+template<class>
+auto g(...) -> char(&)[2];
+
+template<class T, class U>
+auto f2(int) -> decltype(::delete ::new T(declval<U>()), char());
+
+template<class, class>
+auto f2(...) -> char(&)[2];
+
+template<class T>
+auto g2(int) -> decltype(::delete ::new T(), char());
+
+template<class>
+auto g2(...) -> char(&)[2];
+
+struct C { };
+
+struct A {
+ virtual ~A() = 0;
+};
+
+struct D1 {
+ D1() = delete;
+};
+
+struct D2 {
+ ~D2() = delete;
+};
+
+static_assert(sizeof(g<void>(0)) == 2, "Ouch");
+static_assert(sizeof(g<void()>(0)) == 2, "Ouch");
+static_assert(sizeof(g<void() const>(0)) == 2, "Ouch");
+static_assert(sizeof(g<A>(0)) == 2, "Ouch");
+static_assert(sizeof(g<D1>(0)) == 2, "Ouch");
+static_assert(sizeof(g<D2>(0)) == 2, "Ouch");
+static_assert(sizeof(g<int&>(0)) == 2, "Ouch");
+static_assert(sizeof(g<int&&>(0)) == 2, "Ouch");
+static_assert(sizeof(g<void(&)()>(0)) == 2, "Ouch");
+static_assert(sizeof(g<void(&&)()>(0)) == 2, "Ouch");
+static_assert(sizeof(f<void, void>(0)) == 2, "Ouch");
+static_assert(sizeof(f<void(), void()>(0)) == 2, "Ouch");
+//static_assert(sizeof(f<void() const, void() const>(0)) == 2, "Ouch");
+static_assert(sizeof(f<int, void>(0)) == 2, "Ouch");
+static_assert(sizeof(f<void, int>(0)) == 2, "Ouch");
+static_assert(sizeof(f<C, void>(0)) == 2, "Ouch");
+static_assert(sizeof(f<C, int>(0)) == 2, "Ouch");
+static_assert(sizeof(f<int&, int&>(0)) == 2, "Ouch");
+static_assert(sizeof(f<int&&, int&&>(0)) == 2, "Ouch");
+static_assert(sizeof(f<void(&)(), void(&)()>(0)) == 2, "Ouch");
+static_assert(sizeof(f<void(&&)(), void(&&)()>(0)) == 2, "Ouch");
+
+static_assert(sizeof(g2<void>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<void()>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<void() const>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<A>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<D1>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<D2>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<int&>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<int&&>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<void(&)()>(0)) == 2, "Ouch");
+static_assert(sizeof(g2<void(&&)()>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<void, void>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<void(), void()>(0)) == 2, "Ouch");
+//static_assert(sizeof(f2<void() const, void() const>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<int, void>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<void, int>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<C, void>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<C, int>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<int&, int&>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<int&&, int&&>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<void(&)(), void(&)()>(0)) == 2, "Ouch");
+static_assert(sizeof(f2<void(&&)(), void(&&)()>(0)) == 2, "Ouch");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype41.C
new file mode 100644
index 0000000..1439e15
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype41.C
@@ -0,0 +1,43 @@
+// Core 1273
+// { dg-do compile { target c++11 } }
+
+template <class T> struct C;
+template <class T> struct D;
+
+class A
+{
+ int i;
+ static int j;
+ friend struct C<int>;
+ friend struct D<int>;
+} a;
+
+class B
+{
+ int i;
+ static int j;
+ friend struct C<float>;
+ friend struct D<float>;
+} b;
+
+template <class T>
+struct C
+{
+ template <class U> decltype (a.i) f() { } // #1
+ template <class U> decltype (b.i) f() { } // #2
+};
+
+template <class T>
+struct D
+{
+ template <class U> decltype (A::j) f() { } // #1
+ template <class U> decltype (B::j) f() { } // #2
+};
+
+int main()
+{
+ C<int>().f<int>(); // calls #1
+ C<float>().f<float>(); // calls #2
+ D<int>().f<int>(); // calls #1
+ D<float>().f<float>(); // calls #2
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype42.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype42.C
new file mode 100644
index 0000000..6c1aa43
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype42.C
@@ -0,0 +1,31 @@
+// PR c++/50545
+// { dg-do compile { target c++11 } }
+
+template< class T >
+T&& declval();
+
+// #1
+template< class T >
+auto f( int )
+ -> decltype( int{ declval<T>() } );
+
+// #2
+template< class >
+void f( ... );
+
+
+#define STATIC_ASSERT( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ )
+
+template< class T, class U >
+struct is_same {
+ static constexpr bool value = false;
+};
+
+template< class T >
+struct is_same<T, T> {
+ static constexpr bool value = true;
+};
+
+
+STATIC_ASSERT( is_same< decltype( f<int>(0) ), int >::value ); // OK; f<int>(0) calls #1.
+STATIC_ASSERT( is_same< decltype( f<int*>(0) ), void >::value ); // static assertion fails; f<int*>(0) should call #2, because int{ (int*)0 } is ill-formed, but calls #1.
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype43.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype43.C
new file mode 100644
index 0000000..4df95a1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype43.C
@@ -0,0 +1,27 @@
+// PR c++/53763
+// { dg-do compile { target c++11 } }
+
+template<typename TYPE>
+struct A
+{
+ static int a(TYPE value)
+ {
+ return value;
+ }
+};
+
+template<typename... ARGS>
+struct B
+{
+ static int b(ARGS...)
+ {
+ return 0;
+ }
+};
+
+int main()
+{
+ int x = B<decltype(A<int>::a(1))>::b(A<int>::a(1));
+ int y = B<decltype(A ::a(2))>::b(A<int>::a(2)); // { dg-error "template argument" }
+ return x + y;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype44.C
new file mode 100644
index 0000000..2b2e622
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype44.C
@@ -0,0 +1,44 @@
+// PR c++/53307
+// { dg-do compile { target c++11 } }
+
+template <class...Ts> struct tuple{};
+
+struct funct
+{
+ template <class T, class...argTs>
+ T operator()(T arg1, argTs...)
+ {
+ return arg1;
+ }
+};
+
+template <class...>class test;
+
+template < template <class...> class tp,
+ class...arg1Ts,
+ class...arg2Ts>
+class test<tp<arg1Ts...>, tp<arg2Ts...>>
+{
+ public:
+ template <class func>
+ auto test_pass(func fun, arg2Ts...arg2s)
+ -> decltype(fun(arg2s...))
+ {
+ return fun(arg2s...);
+ }
+
+ template <class func, class...arg3Ts>
+ auto testbug(func fun, arg2Ts...arg2s, arg3Ts...arg3s)
+ -> decltype(fun(arg2s..., arg3s...))
+ {
+ return fun(arg2s..., arg3s...);
+ }
+};
+
+int main()
+{
+ test<tuple<>, tuple<char, int>> t;
+ t.test_pass (funct(), 'a', 2);
+ t.testbug (funct(), 'a', 2, "fine");
+ t.testbug (funct(), 'a', 2);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype45.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype45.C
new file mode 100644
index 0000000..f768d85
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype45.C
@@ -0,0 +1,40 @@
+// PR c++/51878
+// { dg-do compile { target c++11 } }
+
+template<class F, class... T>
+auto indirect_call(F f, T... t) -> decltype(f(t...))
+{
+ return f(t...);
+}
+
+template<class F, class T>
+struct VariadicBind
+{
+ F f;
+ T t;
+
+ template<class... A>
+ auto operator()(A... a) -> decltype(indirect_call(f, t, a...))
+ {
+ return indirect_call(f, t, a...);
+ }
+};
+
+template<class F>
+void apply(F f)
+{
+ f();
+}
+
+template<class F, class V1, class... V>
+void apply(F f, V1 v1, V... v)
+{
+ apply(VariadicBind<F, int>{f, v1}, v...);
+}
+
+void func(int, int) { }
+
+int main()
+{
+ apply(func, 0, 0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype46.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype46.C
new file mode 100644
index 0000000..f18354d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype46.C
@@ -0,0 +1,12 @@
+// PR c++/55558
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ static int member;
+};
+
+template<typename T> void foobar ()
+{
+ typedef decltype (A::member) myType;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype47.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype47.C
new file mode 100644
index 0000000..f6700a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype47.C
@@ -0,0 +1,12 @@
+// PR c++/55564
+// { dg-do compile { target c++11 } }
+
+template <typename T, decltype(sizeof(T)) N>
+auto array_size(T(&)[N]) -> decltype(N) { return N; }
+
+int main() {
+ int simple[4] = {};
+ int result = array_size(simple);
+
+ return result;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype48.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype48.C
new file mode 100644
index 0000000..39fc4eb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype48.C
@@ -0,0 +1,16 @@
+// PR c++/56059
+// { dg-do compile { target c++11 } }
+
+typedef int Int;
+template<typename T> struct baz { };
+template<typename T> T bar();
+
+template<typename T, typename ... U>
+baz<decltype(bar<Int>(bar<U>() ...))> // { dg-error "no match" }
+foo();
+
+int main()
+{
+ foo<int, int>(); // { dg-error "no match" }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype49.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype49.C
new file mode 100644
index 0000000..c317498
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype49.C
@@ -0,0 +1,10 @@
+// PR c++/45282
+// { dg-require-effective-target c++11 }
+
+struct A { int i; };
+int A::*ipm = &A::i;
+
+template <class T, class U> class assert_same_type;
+template <class T> class assert_same_type<T,T> { };
+
+assert_same_type<decltype(A().*ipm),int> x2;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype5.C
new file mode 100644
index 0000000..3842e09
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype5.C
@@ -0,0 +1,37 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+#define CHECK_DECLTYPE(DECLTYPE,RESULT) \
+ static_assert(is_same< DECLTYPE , RESULT >::value, #RESULT)
+
+template<typename F> F create_a();
+
+template<typename F, typename T1>
+decltype(create_a<F&>()(create_a<const T1&>())) forward(F f, const T1& a1)
+{
+ return f(a1);
+}
+
+struct identity {
+ template<typename T>
+ const T& operator()(const T& x) { return x; }
+};
+
+
+identity id;
+int i;
+float f;
+
+CHECK_DECLTYPE(decltype(forward(id, i)), const int&);
+CHECK_DECLTYPE(decltype(forward(id, f)), const float&);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype50.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype50.C
new file mode 100644
index 0000000..dc3332a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype50.C
@@ -0,0 +1,18 @@
+// PR c++/52597
+// { dg-require-effective-target c++11 }
+
+struct A {
+ int zip();
+
+ decltype(zip) bar0; // { dg-error "invalid use of non-static member function" }
+ void bar1() {
+ typedef decltype(this->A::zip) x; // { dg-error "invalid use of non-static member function" }
+ }
+ void bar2() {
+ typedef decltype(A::zip) x; // { dg-error "invalid use of non-static member function" }
+ }
+};
+
+typedef decltype(A().zip) x; // { dg-error "invalid use of non-static member function" }
+
+// { dg-prune-output "invalid type in declaration" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype51.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype51.C
new file mode 100644
index 0000000..9ab4146
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype51.C
@@ -0,0 +1,10 @@
+// PR c++/53721
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ void f() {};
+ auto g() -> decltype(this->f())
+ {
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype52.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype52.C
new file mode 100644
index 0000000..e6b5a4c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype52.C
@@ -0,0 +1,18 @@
+// PR c++/56450
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+T&& declval();
+
+template<typename, typename>
+struct is_same
+{ static constexpr bool value = false; };
+
+template<typename T>
+struct is_same<T, T>
+{ static constexpr bool value = true; };
+
+struct A { static const int dummy = 0; };
+
+static_assert(is_same<decltype(declval<A>().dummy), const int>::value, "");
+static_assert(!is_same<decltype(declval<A>().dummy), const int&>::value, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype53.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype53.C
new file mode 100644
index 0000000..4580e97
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype53.C
@@ -0,0 +1,11 @@
+// PR c++/57092
+// { dg-do compile { target c++11 } }
+
+template <void (*F)(int)>
+class B {
+ decltype(F) v;
+};
+
+void foo(int) {}
+
+B<foo> o;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype54.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype54.C
new file mode 100644
index 0000000..9d301c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype54.C
@@ -0,0 +1,26 @@
+// PR c++/51908
+// { dg-do compile { target c++11 } }
+
+struct foo1
+{
+ template <typename Ret, typename... Args>
+ operator decltype(static_cast<Ret (*)(Args...)>(nullptr)) () const;
+};
+
+struct foo2
+{
+ template <typename Ret, typename... Args>
+ operator decltype(static_cast<Ret (*)(Args... args)>(nullptr)) () const;
+};
+
+struct foo3
+{
+ template <typename Ret, typename Arg>
+ operator decltype(static_cast<Ret (*)(Arg)>(nullptr)) () const;
+};
+
+struct foo4
+{
+ template <typename Ret, typename Arg>
+ operator decltype(static_cast<Ret (*)(Arg arg)>(nullptr)) () const;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype55.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype55.C
new file mode 100644
index 0000000..95427fc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype55.C
@@ -0,0 +1,20 @@
+// PR c++/53211
+// { dg-do compile { target c++11 } }
+
+template<typename A, typename B>
+ struct is_same { static const bool value = false; };
+
+template<typename A>
+ struct is_same<A, A> { static const bool value = true; };
+
+template<typename... Args>
+void func(Args... args)
+{
+ int arr[] = { args... };
+ static_assert (is_same<decltype(arr), int[sizeof...(Args)]>::value, "");
+}
+
+int main()
+{
+ func(1, 2, 3, 4);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype56.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype56.C
new file mode 100644
index 0000000..b44fad0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype56.C
@@ -0,0 +1,11 @@
+// PR c++/52816
+// { dg-do compile { target c++11 } }
+
+class c {
+ int f;
+ public:
+ template <typename A>
+ decltype(f) m(A) const;
+};
+
+decltype(c{}.m(0)) i;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype57.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype57.C
new file mode 100644
index 0000000..353cc72
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype57.C
@@ -0,0 +1,8 @@
+// PR c++/58633
+// { dg-do compile { target c++11 } }
+
+void foo(int i)
+{
+ typedef int I;
+ decltype(i.I::~I())* p;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype6.C
new file mode 100644
index 0000000..10086c5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype6.C
@@ -0,0 +1,35 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+template<typename T> const T& foo();
+
+
+int i;
+
+template<typename T>
+struct A
+{
+ double x;
+};
+
+const A<double>* a = new A<double>();
+
+static_assert(is_same<decltype(foo<int>()), const int&>::value,
+ "type should be const int&");
+static_assert(is_same<decltype(i), int>::value,
+ "type should be int");
+static_assert(is_same<decltype(a->x), double>::value,
+ "type should be double");
+static_assert(is_same<decltype((a->x)), const double&>::value,
+ "type should be const double&");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype7.C
new file mode 100644
index 0000000..f757c9e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype7.C
@@ -0,0 +1,14 @@
+// PR c++/34268
+// { dg-do compile }
+
+struct A
+{
+ __decltype (A); // { dg-error "must be an expression" }
+ __decltype (~A); // { dg-error "must be an expression" }
+};
+
+struct B
+{
+ __typeof__ (B);
+ __typeof__ (~B); // { dg-error "expected primary-expression" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype8.C
new file mode 100644
index 0000000..3680689
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype8.C
@@ -0,0 +1,12 @@
+// PR c++/34267
+// { dg-do compile }
+
+struct A {};
+__decltype (A); // { dg-error "must be an expression" }
+template<int> struct B
+{
+ __decltype (A); // { dg-error "must be an expression" }
+ __decltype (~A); // { dg-error "must be an expression" }
+ __decltype (B); // { dg-error "must be an expression" }
+ __decltype (~B); // { dg-error "must be an expression" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype9.C
new file mode 100644
index 0000000..9db3db0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/decltype9.C
@@ -0,0 +1,9 @@
+// PR c++/34271
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+ static int i;
+};
+
+template<int N> int A<N>::i(decltype (A::i)); // { dg-error "member function|must be an expression" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deduce.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deduce.C
new file mode 100644
index 0000000..380ca28
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deduce.C
@@ -0,0 +1,36 @@
+// { dg-do compile { target c++11 } }
+template<typename T, typename U> struct same_type;
+template<typename T> struct same_type<T, T> {};
+
+int lval_int;
+int rval_int();
+int const lval_const_int=0;
+int const&& rval_const_int();
+
+template <typename T> void deduce_lval_int(T && t)
+{
+ same_type<T, int &>();
+}
+
+template <typename T> void deduce_rval_int(T && t)
+{
+ same_type<T, int>();
+}
+
+template <typename T> void deduce_lval_const_int(T && t)
+{
+ same_type<T, const int &>();
+}
+
+template <typename T> void deduce_rval_const_int(T && t)
+{
+ same_type<T, const int>();
+}
+
+void f()
+{
+ deduce_lval_int(lval_int);
+ deduce_rval_int(rval_int());
+ deduce_lval_const_int(lval_const_int);
+ deduce_rval_const_int(rval_const_int());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted1.C
new file mode 100644
index 0000000..4956e88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted1.C
@@ -0,0 +1,42 @@
+// Positive test for defaulted/deleted fns
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i;
+ A() = default;
+ A(const A&) = delete;
+ A& operator=(const A&) = default;
+ ~A();
+};
+
+A::~A() = default;
+
+void f() = delete;
+
+struct B
+{
+ int i;
+ B() = default;
+};
+
+int main()
+{
+ A a1, a2;
+ B b = {1};
+ a1 = a2;
+}
+
+// fns defaulted in class defn are trivial
+struct C
+{
+ C() = default;
+ C(const C&) = default;
+ C& operator=(const C&) = default;
+ ~C() = default;
+};
+
+union U
+{
+ C c;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted10.C
new file mode 100644
index 0000000..8537268
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted10.C
@@ -0,0 +1,14 @@
+// PR c++/40381
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template<typename T> void foo(T) = delete; // { dg-error "previously|declared" }
+};
+
+template<typename T> void A::foo(T) {} // { dg-error "redefinition" }
+
+void bar()
+{
+ A().foo(0); // { dg-error "use" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted11.C
new file mode 100644
index 0000000..cd4e293
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted11.C
@@ -0,0 +1,15 @@
+// Core issue 901
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(); ~A();
+ void operator delete (void *) = delete;
+ void operator delete[] (void *) = delete;
+};
+
+int main()
+{
+ A* ap = new A;
+ ap = new A[2];
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted13.C
new file mode 100644
index 0000000..68dc5d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted13.C
@@ -0,0 +1,29 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct NonCopyable {
+ NonCopyable() = default;
+ NonCopyable(NonCopyable const&);
+};
+
+template<>
+NonCopyable<int>::NonCopyable(NonCopyable<int> const&) = delete; // { dg-message "declared" }
+
+template<typename T>
+NonCopyable<T>::NonCopyable(NonCopyable<T> const&) = default;
+
+template<>
+NonCopyable<double>::NonCopyable(NonCopyable<double> const&) = delete; // { dg-message "declared" }
+
+
+int main()
+{
+ NonCopyable<double> nc_dbl;
+ NonCopyable<double> nc_dbl_cpy(nc_dbl); // { dg-error "use" }
+
+ NonCopyable<int> nc_int;
+ NonCopyable<int> nc_int_cpy(nc_int); // { dg-error "use" }
+
+ NonCopyable<char> nc_char;
+ NonCopyable<char> nc_char_cpy(nc_char);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted14.C
new file mode 100644
index 0000000..0c07fa7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted14.C
@@ -0,0 +1,20 @@
+// PR c++/39866
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A& operator=(const A&) = delete; // { dg-bogus "" }
+
+ void operator=(int) {} // { dg-message "" }
+ void operator=(char) {} // { dg-message "" }
+};
+
+struct B {};
+
+int main()
+{
+ A a;
+ a = B(); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 16 }
+ a = 1.0; // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 18 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted15.C
new file mode 100644
index 0000000..fabcc23
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted15.C
@@ -0,0 +1,58 @@
+// PR c++/38796
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert ((X), #X)
+
+struct A
+{
+ A (int);
+ A (const A& = 1) = default; // { dg-error "default argument" }
+ void operator= (const A&) = default; // { dg-error "defaulted|match" }
+};
+
+struct B
+{
+private:
+ B() = default;
+};
+
+SA(__has_trivial_constructor(B));
+
+struct C
+{
+protected:
+ ~C() = default;
+};
+
+SA(__has_trivial_destructor(C));
+
+struct D
+{
+private:
+ D& operator= (const D&) = default;
+};
+
+SA(__has_trivial_assign(D));
+
+struct E
+{
+ explicit E (const E&) = default;
+};
+
+SA(__has_trivial_copy(E));
+
+struct F
+{
+ F(F&) = default;
+};
+
+struct G: public F
+{
+ // Can't be const because F copy ctor isn't.
+ G(const G&) = default; // { dg-error "const" }
+};
+
+struct H
+{
+ virtual ~H() = default;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted16.C
new file mode 100644
index 0000000..f866c8e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted16.C
@@ -0,0 +1,13 @@
+// Test that non-inline default causes the function to be defined even if
+// it isn't used.
+
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1AC1Ev" } }
+
+struct A
+{
+ A();
+};
+
+A::A() = default;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted17.C
new file mode 100644
index 0000000..0a3c0de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted17.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+struct A // { dg-error "const|operator=" }
+{
+ const int i;
+};
+
+int main()
+{
+ A a = { 0 };
+ a = a; // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted18.C
new file mode 100644
index 0000000..6d84a1e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted18.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+void f(char i, int j) = delete; // { dg-message "<deleted>" }
+void f(int i, ...); // { dg-message "void f" }
+
+int main()
+{
+ f(1,1); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 8 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19.C
new file mode 100644
index 0000000..2b93a7b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19.C
@@ -0,0 +1,21 @@
+// We don't allocate a cookie to help us run the destructor if it's trivial,
+// even if it's deleted.
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ ~A() = delete;
+};
+
+void *p = 0;
+void *operator new[](__SIZE_TYPE__ t)
+{
+ p = ::operator new (t);
+ return p;
+}
+
+int main()
+{
+ A* ap = new A[5];
+ return ap != p;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19a.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19a.C
new file mode 100644
index 0000000..a082d51
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted19a.C
@@ -0,0 +1,23 @@
+// We allocate a cookie to help us run the destructor if it's non-trivial,
+// even if it's deleted.
+// { dg-do run { target c++11 } }
+
+struct B { ~B() {} };
+struct A
+{
+ B b;
+ ~A() = delete;
+};
+
+void *p = 0;
+void *operator new[](__SIZE_TYPE__ t)
+{
+ p = ::operator new (t);
+ return p;
+}
+
+int main()
+{
+ A* ap = new A[5];
+ return ap == p;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
new file mode 100644
index 0000000..bd83c7f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
@@ -0,0 +1,69 @@
+// Negative test for defaulted/deleted fns.
+// { dg-do compile { target c++11 } }
+
+void f(); // { dg-message "previous" }
+void f() = delete; // { dg-error "deleted" }
+
+struct A
+{
+ A() { } // { dg-message "previous" }
+ void f() = default; // { dg-error "default" }
+};
+
+A::A() = default; // { dg-error "redefinition" }
+
+void g() {} // { dg-message "previous" }
+void g() = delete; // { dg-error "redefinition" }
+
+struct B // { dg-message "user-provided default constructor" }
+{
+ int i;
+ B() = default; // { dg-message "not user-provided" }
+};
+
+const B b; // { dg-error "uninitialized const" }
+
+struct C
+{
+ virtual void f() = delete; // { dg-error "overriding deleted" }
+};
+
+struct D: public C
+{
+ virtual void f(); // { dg-error "non-deleted function" }
+};
+
+struct E
+{
+ const B b;
+ E() { } // { dg-error "uninitialized" }
+};
+
+struct F
+{
+ F() = default;
+ F(const F&) = delete; // { dg-message "declared" }
+};
+
+struct G
+{
+ G();
+};
+
+// ctor defaulted after class defn is not trivial
+G::G() = default;
+
+union U
+{
+ G g; // { dg-error "union member.*non-trivial" }
+};
+
+int main()
+{
+ F f;
+ F f2(f); // { dg-error "use" }
+ const B* b = new const B; // { dg-error "uninitialized const" }
+ U u; // { dg-error "deleted" }
+}
+
+// { dg-prune-output "implicitly deleted because" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
new file mode 100644
index 0000000..affda20
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
@@ -0,0 +1,19 @@
+// PR c++/46497
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A(A&&) = default;
+};
+struct B {
+ const A a;
+ B(const B&) = default;
+ B(B&&) = default; // { dg-error "implicitly deleted|use of deleted" }
+};
+
+void g(B); // { dg-error "argument 1" }
+B&& f();
+
+int main()
+{
+ g(f()); // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
new file mode 100644
index 0000000..63c98e6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
@@ -0,0 +1,21 @@
+// PR c++/46736
+// { dg-do compile { target c++11 } }
+
+struct U {
+ U();
+private:
+ U(U const&); // { dg-error "private" }
+};
+
+struct X {
+ U const u;
+ X();
+ X(X&&);
+};
+
+X::X(X&&)=default; // { dg-message "implicitly deleted" }
+// { dg-prune-output "within this context" }
+
+X f() {
+ return X();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted22.C
new file mode 100644
index 0000000..5afcd1d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted22.C
@@ -0,0 +1,22 @@
+// Test that a virtual defaulted constructor is still virtual.
+// { dg-do run { target c++11 } }
+
+int r = 1;
+
+struct A
+{
+ virtual ~A() = default;
+};
+
+struct B: A
+{
+ ~B() noexcept { r = 0; }
+};
+
+A* ap = new B();
+
+int main()
+{
+ delete ap;
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted23.C
new file mode 100644
index 0000000..9e6cbc3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted23.C
@@ -0,0 +1,37 @@
+// Test for checking of exception specifications on defaulted fns
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A() noexcept = default;
+};
+
+A a;
+
+struct B
+{
+ B() throw (int) = default; // { dg-message "exception-specification" }
+};
+
+B b; // { dg-error "deleted" }
+
+struct C
+{
+ C() throw (int) { }
+};
+
+C c;
+
+struct D: C
+{
+ D() throw (int) = default;
+};
+
+D d;
+
+struct E
+{
+ E() = default;
+};
+
+E e;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted24.C
new file mode 100644
index 0000000..32c6f2e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted24.C
@@ -0,0 +1,6 @@
+// PR c++/48280
+// { dg-do compile { target c++11 } }
+
+struct S {
+ template < typename > S (const S &) = default; // { dg-error "" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted25.C
new file mode 100644
index 0000000..644fe1b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted25.C
@@ -0,0 +1,10 @@
+// PR c++/48930
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+
+struct A
+{
+ A(const A&) = default;
+};
+
+A a; // { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
new file mode 100644
index 0000000..f14a0e8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted26.C
@@ -0,0 +1,7 @@
+// PR c++/49066
+// { dg-do compile { target c++11 } }
+
+void foo() = delete; // { dg-message "declared here" }
+void foo();
+
+int main() { foo(); } // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted27.C
new file mode 100644
index 0000000..d26e744
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted27.C
@@ -0,0 +1,19 @@
+// PR c++/47544
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1sIiEC2Ev" } }
+// { dg-final { scan-assembler-not "_ZN1sIiED2Ev" } }
+
+template <typename T>
+struct s {
+ s();
+ ~s() = default;
+};
+
+extern template struct s<int>;
+
+template <typename T>
+s<T>::s() = default;
+
+template struct s<int>;
+
+s<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted28.C
new file mode 100644
index 0000000..aa90099
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted28.C
@@ -0,0 +1,17 @@
+// PR c++/49102
+// PR c++/50034
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A() = default;
+
+private:
+ A(A const&) = default; // { dg-error "private" }
+};
+
+int f(...) { }
+int main() {
+ A a;
+ f(a); // { dg-error "this context" }
+ sizeof(f(a)); // OK because unevaluated
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted29.C
new file mode 100644
index 0000000..8e2989b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted29.C
@@ -0,0 +1,20 @@
+// PR c++/46696
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A& operator= (A const&);
+};
+
+struct B
+{
+ A ar[1];
+ B& operator= (B const&) = default;
+};
+
+int main()
+{
+ B x;
+ B y;
+ y = x;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted3.C
new file mode 100644
index 0000000..75e89c8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted3.C
@@ -0,0 +1,16 @@
+// PR c++/37006
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct A {
+ template<class U>
+ bool operator==(const A<U>&) = delete; // { dg-message "declared" }
+ operator bool () { return true; }
+};
+
+int main()
+{
+ A<int> a1;
+ A<void> a2;
+ if(a1 == a2) {} // { dg-error "use" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted30.C
new file mode 100644
index 0000000..ce86f57
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted30.C
@@ -0,0 +1,16 @@
+// PR c++/49507
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct ConcretePoolKey
+{
+ virtual ~ConcretePoolKey();
+};
+
+template<typename T>
+ConcretePoolKey<T>::~ConcretePoolKey() = default;
+
+int main()
+{
+ ConcretePoolKey<int> foo;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted31.C
new file mode 100644
index 0000000..2ac28ba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted31.C
@@ -0,0 +1,16 @@
+// PR c++/39164
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A() { } // { dg-message "defined" }
+ ~A() = default; // { dg-error "defaulted" }
+};
+
+A::A() = default; // { dg-error "redefinition" }
+A::~A() noexcept (true) { } // { dg-error "defaulted" }
+
+int main()
+{
+ A a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted32.C
new file mode 100644
index 0000000..e5b94b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted32.C
@@ -0,0 +1,21 @@
+// PR c++/50531
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+class DataFilter
+{
+ public:
+ inline virtual ~DataFilter();
+};
+
+template<typename T>
+inline DataFilter<T>::~DataFilter() = default;
+
+class ARCalculator : public DataFilter<ARCalculator>
+{
+ public:
+ virtual void dataStart(int, int);
+};
+
+void ARCalculator::dataStart(int, int)
+{}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted33.C
new file mode 100644
index 0000000..2f11c13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted33.C
@@ -0,0 +1,32 @@
+// PR c++/50973
+// { dg-do compile { target c++11 } }
+
+class HD
+{
+ public:
+ virtual ~HD() {};
+};
+class InputHD : public virtual HD
+{
+};
+class OutputHD : public virtual HD
+{
+};
+class IOHD : public InputHD, public OutputHD
+{
+};
+template <typename T, unsigned int N>
+class ArrayNHD : public IOHD
+{
+ public:
+ ~ArrayNHD() = default;
+};
+class TLText
+{
+ ~TLText();
+ ArrayNHD<int, 1>* m_argsHD;
+};
+TLText::~TLText()
+{
+ delete m_argsHD;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted34.C
new file mode 100644
index 0000000..ff777f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted34.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "__cxa_deleted_virtual" } }
+
+struct A
+{
+ virtual void f();
+ virtual ~A() = delete;
+};
+
+void A::f() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted35.C
new file mode 100644
index 0000000..adf9c82
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted35.C
@@ -0,0 +1,8 @@
+// PR c++/53096
+// { dg-do compile { target c++11 } }
+
+struct foo
+{
+ foo(foo&) = default;
+ foo& operator=(foo&) = default;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted36.C
new file mode 100644
index 0000000..1360f60
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted36.C
@@ -0,0 +1,24 @@
+// PR c++/53733
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct wrap
+{
+ wrap() = default;
+ wrap(wrap&&) = default; // Line 5
+ wrap(const wrap&) = default;
+
+ T t;
+};
+
+struct S {
+ S() = default;
+ S(const S&){}
+ S(S&&) = default;
+};
+
+typedef wrap<const S> W;
+
+W get() { return W(); } // Line 19
+
+int main() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted37.C
new file mode 100644
index 0000000..1926f2e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted37.C
@@ -0,0 +1,19 @@
+// DR 1402
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A& operator=(A&&);
+};
+
+struct B: virtual A { B& operator=(B&&) = default; }; // { dg-warning "virtual base" }
+struct C: virtual A { }; // { dg-warning "virtual base" }
+
+int main()
+{
+ B b1, b2;
+ b2 = static_cast<B&&>(b1);
+
+ C c1, c2;
+ c2 = static_cast<C&&>(c1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted38.C
new file mode 100644
index 0000000..39424f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted38.C
@@ -0,0 +1,14 @@
+// PR c++/50893
+// { dg-do compile { target c++11 } }
+
+class Base
+{
+ public:
+ virtual ~Base() = default;
+};
+
+class Derived : public Base
+{
+ public:
+ virtual ~Derived() = default;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted39.C
new file mode 100644
index 0000000..a4963c4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted39.C
@@ -0,0 +1,23 @@
+// DR 1402
+// { dg-do compile { target c++11 } }
+
+template <class T> T&& move(T& t);
+
+struct A
+{
+ A(const A&);
+};
+
+struct B
+{
+ B(B&&);
+};
+
+struct C
+{
+ A a;
+ B b;
+};
+
+extern C c1;
+C c2(move(c1));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted4.C
new file mode 100644
index 0000000..ca07d76
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted4.C
@@ -0,0 +1,25 @@
+// PR c++/37208: SFINAE and deleted functions.
+
+// { dg-do compile { target c++11 } }
+template<int> struct A { };
+
+template<typename T>
+int& int_if_addable(A<sizeof((*(T*)0) + (*(T*)0))>*);
+
+template<typename T>
+float& int_if_addable(...);
+
+struct X { };
+
+struct Y { };
+Y operator+(Y, Y);
+
+struct Z { };
+Z operator+(Z, Z) = delete;
+
+void f()
+{
+ float& x = int_if_addable<X>(0);
+ int& y = int_if_addable<Y>(0);
+ float& z = int_if_addable<Z>(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted40.C
new file mode 100644
index 0000000..8da1364
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted40.C
@@ -0,0 +1,23 @@
+// DR 1402
+// { dg-do compile { target c++11 } }
+
+template <class T> T&& move(T& t);
+
+struct A
+{
+ A(const A&);
+};
+
+struct B
+{
+ B(B&&) = delete; // { dg-prune-output "declared" }
+};
+
+struct C // { dg-error "deleted" }
+{
+ A a;
+ B b;
+};
+
+extern C c1;
+C c2(move(c1)); // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted41.C
new file mode 100644
index 0000000..4272012
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted41.C
@@ -0,0 +1,14 @@
+// PR c++/56343
+// { dg-do compile { target c++11 } }
+
+class B
+{
+public:
+ virtual ~B() noexcept(false) { }
+};
+
+class D : public B
+{
+public:
+ virtual ~D() = default;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted42.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted42.C
new file mode 100644
index 0000000..1ac25a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted42.C
@@ -0,0 +1,10 @@
+// DR 941
+// { dg-require-effective-target c++11 }
+
+template <class T> T f(T) = delete;
+template<> int f(int) { return 42; }
+
+int main()
+{
+ f(42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted43.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted43.C
new file mode 100644
index 0000000..f2846fe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted43.C
@@ -0,0 +1,60 @@
+// PR c++/53903
+// { dg-do compile { target c++11 } }
+
+struct T
+{
+ T() noexcept(false) { }
+ ~T() noexcept(false) { }
+};
+
+T t;
+
+struct A
+{
+ A() noexcept;
+ ~A() noexcept;
+
+ T t;
+};
+
+A::A() noexcept = default; // { dg-error "defaulted" }
+A::~A() noexcept = default; // { dg-error "defaulted" }
+
+struct U
+{
+ U() noexcept(false) { }
+ ~U() noexcept(false) { }
+};
+
+U u;
+
+struct B
+{
+ B() noexcept(false);
+ ~B() noexcept(false);
+
+ U u;
+};
+
+B::B() noexcept(false) = default;
+B::~B() noexcept(false) = default;
+
+B b;
+
+struct V
+{
+ V() noexcept(false) { }
+ ~V() noexcept(false) { }
+};
+
+V v;
+
+struct C
+{
+ C() noexcept = default; // { dg-message "exception-specification" }
+ ~C() noexcept = default; // { dg-message "exception-specification" }
+
+ V v;
+};
+
+C c; // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted44.C
new file mode 100644
index 0000000..213c139
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted44.C
@@ -0,0 +1,24 @@
+// PR c++/57319
+// { dg-require-effective-target c++11 }
+
+namespace N1 {
+ struct A { };
+ struct B: virtual A { };
+ struct C: virtual B { };
+
+ struct D: C
+ {
+ void operator= (D &);
+ };
+}
+
+namespace N2 {
+ struct A { A& operator=(A&&); };
+ struct B: virtual A { }; // { dg-warning "move assignment" }
+ struct C: virtual B { }; // { dg-warning "move assignment" }
+
+ struct D: C
+ {
+ void operator= (D &);
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted45.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted45.C
new file mode 100644
index 0000000..e91b3a1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted45.C
@@ -0,0 +1,20 @@
+// { dg-do run }
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ int i;
+ A() = default;
+ A(int i): i{i} { }
+ ~A() {}
+};
+
+int main(int argc, char **argv)
+{
+ { int i[4] = { 42, 42, 42, 42 }; }
+ {
+ A a[4] = { argc };
+ if (a[1].i != 0)
+ __builtin_abort ();
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted46.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted46.C
new file mode 100644
index 0000000..d4562c9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted46.C
@@ -0,0 +1,17 @@
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+protected:
+ A() = default;
+ int i;
+};
+
+struct B: A {
+ B() = default;
+};
+
+int main()
+{
+ B();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted47.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted47.C
new file mode 100644
index 0000000..f4b62a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted47.C
@@ -0,0 +1,16 @@
+// PR c++/54812
+// { dg-do compile { target c++11 } }
+
+class A
+{
+ A() = default; // { dg-error "private" }
+};
+
+A a; // { dg-error "context" }
+
+class B
+{
+ ~B() = default; // { dg-error "private" }
+};
+
+B b; // { dg-error "context" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted48.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
new file mode 100644
index 0000000..727afc5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
@@ -0,0 +1,17 @@
+// PR c++/60108
+// { dg-require-effective-target c++11 }
+
+template<int> struct A
+{
+ virtual ~A();
+};
+
+template<typename> struct B : A<0>, A<1>
+{
+ ~B() = default;
+};
+
+struct C : B<bool>
+{
+ C() {}
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted5.C
new file mode 100644
index 0000000..96394ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted5.C
@@ -0,0 +1,19 @@
+// PR c++/37234
+// { dg-do link { target c++11 } }
+
+template <typename T>
+class foo {
+ public:
+ foo() =default;
+ ~foo();
+};
+
+template <typename T>
+foo<T>::~foo() =default;
+
+int main() {
+
+ foo<int> fi;
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted6.C
new file mode 100644
index 0000000..440c58d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted6.C
@@ -0,0 +1,13 @@
+// PR c++/37906
+// { dg-do compile { target c++11 } }
+
+struct b
+{
+ b() = default;
+ b(const b&) = delete;
+};
+
+void test01()
+{
+ static_assert(__has_trivial_constructor(b), "default ctor not trivial");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted7.C
new file mode 100644
index 0000000..089d618
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted7.C
@@ -0,0 +1,12 @@
+// PR c++/38701, 38702
+// { dg-do compile { target c++11 } }
+
+void foo() = default; // { dg-error "cannot be defaulted" }
+namespace
+{
+ void bar() = default; // { dg-error "cannot be defaulted" }
+}
+
+enum E { e };
+
+E& operator |= (E&, const E&) = default; // { dg-error "cannot be defaulted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted8.C
new file mode 100644
index 0000000..383766d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted8.C
@@ -0,0 +1,8 @@
+// PR c++/38649
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(...) = default; // { dg-error "cannot be defaulted" }
+ A(const A&, ...) = default; // { dg-error "cannot be defaulted" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted9.C
new file mode 100644
index 0000000..8d3aef8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/defaulted9.C
@@ -0,0 +1,21 @@
+// PR c++/39153
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-inline" }
+
+struct _Impl_base
+{
+ _Impl_base() = default;
+ virtual ~_Impl_base();
+};
+
+inline _Impl_base::~_Impl_base() = default;
+
+template<typename _Tp>
+class _Impl : public _Impl_base
+{ };
+
+int main()
+{
+ _Impl<int> i;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted1.C
new file mode 100644
index 0000000..0a632bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted1.C
@@ -0,0 +1,6 @@
+// PR c++/58581
+// { dg-do compile { target c++11 } }
+
+template<typename T> int foo(T) noexcept(T()) = delete;
+
+int i = foo(0); // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted2.C
new file mode 100644
index 0000000..8590c49
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted2.C
@@ -0,0 +1,9 @@
+// PR c++/52707
+// { dg-do compile { target c++11 } }
+
+struct A {
+ int m;
+ A() = delete;
+};
+
+A a = {1};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted3.C
new file mode 100644
index 0000000..6783677
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/deleted3.C
@@ -0,0 +1,11 @@
+// PR c++/60216
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ template<typename T> A(T) = delete;
+};
+
+template<> A::A<int>(int) {}
+
+A a(0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dependent1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dependent1.C
new file mode 100644
index 0000000..629b125
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dependent1.C
@@ -0,0 +1,25 @@
+// PR c++/48319
+// { dg-do compile { target c++11 } }
+// We were failing to recognize declval<_Args1> as dependent.
+
+template<typename Tp> Tp declval() noexcept;
+
+template<typename _Tp>
+class __is_constructible_helper
+{
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1, typename... _Args1>
+ static decltype(_Tp1(declval<_Args1>()...), __one()) __test(int);
+
+ template<typename, typename...>
+ static __two __test(...);
+
+public:
+ static const bool __value = sizeof(__test<_Tp>(0)) == 1;
+};
+
+int main() {
+ return __is_constructible_helper<int>::__value;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/diag1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/diag1.C
new file mode 100644
index 0000000..9bf7cfe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/diag1.C
@@ -0,0 +1,32 @@
+// { dg-do compile { target c++11 } }
+
+template <int U>
+struct TypeA
+{
+ typedef int type;
+};
+
+template <int N>
+struct TypeB
+{
+ template <int U> typename TypeA<U>::type fn();
+};
+
+struct TypeC
+{
+ TypeB<10> b;
+ // This was being printed as:
+ // template<int N>
+ // decltype (((TypeC*)this)->
+ // TypeC::b.
+ // template<int U> typename TypeA<U>::type TypeB::fn [with int U = U, int N = 10, typename TypeA<U>::type = TypeA<U>::type]())
+ // TypeC::fn()
+ // we don't want to see the template header, return type, or parameter bindings
+ // for TypeB::fn.
+ template <int N> auto fn() -> decltype(b.fn<N>()); // { dg-bogus "typename|with" }
+};
+
+int main()
+{
+ TypeC().fn<4>(1); // { dg-error "no match" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C
new file mode 100644
index 0000000..1224f36
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C
@@ -0,0 +1,31 @@
+// PR c++/57599
+// { dg-do compile { target c++11 } }
+
+struct A { };
+struct B : public A { };
+
+template<class, class>
+struct is_same { static constexpr bool value = false; };
+
+template<class T>
+struct is_same<T, T> { static constexpr bool value = true; };
+
+template<class T>
+T val();
+
+static_assert(is_same<decltype(dynamic_cast<A*>(val<B*>())),
+ A*>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<A&>(val<B&>())),
+ A&>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<const A*>(val<B*>())),
+ const A*>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<const A&>(val<B&>())),
+ const A&>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<volatile A*>(val<B*>())),
+ volatile A*>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<volatile A&>(val<B&>())),
+ volatile A&>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<const volatile A*>(val<B*>())),
+ const volatile A*>::value, "Ouch");
+static_assert(is_same<decltype(dynamic_cast<const volatile A&>(val<B&>())),
+ const volatile A&>::value, "Ouch");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision.C
new file mode 100644
index 0000000..4cc5653
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision.C
@@ -0,0 +1,75 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test: Implicit cast to rvalue when eliding copy
+
+// { dg-do compile { target c++11 } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+
+class move_only
+{
+ move_only(const move_only&);
+ move_only& operator=(const move_only&);
+public:
+ move_only() {}
+ move_only(move_only&&) {}
+ move_only& operator=(move_only&&) {return *this;}
+};
+
+move_only
+test1()
+{
+ return move_only();
+}
+
+move_only
+test2()
+{
+ move_only x;
+ return x;
+}
+
+move_only
+test3(bool b)
+{
+ move_only x1;
+ if (b)
+ {
+ move_only x2;
+ return x2;
+ }
+ return x1;
+}
+
+void
+test4(bool b)
+{
+ if (!b)
+ throw move_only();
+}
+
+void
+test5(bool b)
+{
+ move_only x;
+ if (!b)
+ throw x;
+}
+
+extern bool b;
+
+int main()
+{
+ move_only t1 = test1();
+ move_only t2 = test2();
+ move_only t3 = test3(b);
+ test4(b);
+ test5(b);
+ return 0;
+}
+
+bool b = true;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision2.C
new file mode 100644
index 0000000..b3d13fb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision2.C
@@ -0,0 +1,13 @@
+// Core 1148: should be able to move from value parameter on return
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(const A&) = delete;
+ A(A&&);
+};
+
+A f (A a)
+{
+ return a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_neg.C
new file mode 100644
index 0000000..0870a80
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_neg.C
@@ -0,0 +1,43 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test: Implicit cast to rvalue when eliding copy
+
+// { dg-do compile { target c++11 } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+
+class move_only
+{
+ move_only(const move_only&); // { dg-error "is private" }
+ move_only& operator=(const move_only&);
+public:
+ move_only() {}
+ move_only(move_only&&) {}
+ move_only& operator=(move_only&&) {return *this;}
+};
+
+move_only
+test1()
+{
+ static move_only x;
+ return x; // { dg-error "within this context" }
+}
+
+move_only
+test2(move_only&& x)
+{
+ return x; // { dg-error "within this context" }
+}
+
+int main()
+{
+ move_only t1 = test1();
+ move_only t2 = test2(move_only());
+ return 0;
+}
+
+bool b = true;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_weak.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_weak.C
new file mode 100644
index 0000000..e8ba755
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/elision_weak.C
@@ -0,0 +1,19 @@
+// { dg-do compile }
+
+struct S
+{
+ S() {}
+ S(S&) {}
+};
+
+S f()
+{
+ S s;
+ return s;
+}
+
+void g()
+{
+ S s;
+ throw s;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum1.C
new file mode 100644
index 0000000..bf17429
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum1.C
@@ -0,0 +1,5 @@
+// PR c++/38021
+// { dg-do compile { target c++11 } }
+
+enum : { }; // { dg-error "expected" }
+enum : 3 { }; // { dg-error "expected" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum10.C
new file mode 100644
index 0000000..daffd19
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum10.C
@@ -0,0 +1,9 @@
+// PR c++/48534
+// { dg-do compile { target c++11 } }
+
+enum class OpSE : bool;
+
+int main()
+{
+ return static_cast<bool>(OpSE());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum11.C
new file mode 100644
index 0000000..a449f1c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum11.C
@@ -0,0 +1,15 @@
+// PR c++/48969
+// { dg-do compile { target c++11 } }
+// { dg-options "-ftemplate-depth=10" }
+
+template<unsigned int N> struct Pair { };
+struct Foo { enum { Mask = 1 }; } foo;
+template<typename A, typename B> class Pair<A::Mask | B::Mask>
+operator|(const A &, const B &) // { dg-message "substitution" }
+{ }
+
+Pair<Foo::Mask> f = foo|foo; // { dg-message "no match" }
+
+// { dg-prune-output "note" }
+// { dg-prune-output "here" }
+// { dg-prune-output "instantiation depth" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum12.C
new file mode 100644
index 0000000..ea55cfe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum12.C
@@ -0,0 +1,19 @@
+// PR c++/48780
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=0" }
+
+typedef __builtin_va_list __gnuc_va_list;
+typedef __gnuc_va_list va_list;
+
+enum struct A : short { X };
+
+void foo(int x, ...) {
+ va_list vl;
+ __builtin_va_start(vl, x);
+ enum A t = __builtin_va_arg(vl, enum A);
+ __builtin_va_end(vl);
+}
+
+int main() {
+ foo(0, A::X);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum13.C
new file mode 100644
index 0000000..5e4a532
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum13.C
@@ -0,0 +1,21 @@
+// PR c++/48780
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=5 -Wabi" }
+
+typedef __builtin_va_list __gnuc_va_list;
+typedef __gnuc_va_list va_list;
+
+enum struct A : short { X };
+
+void foo(int x, ...) {
+ va_list vl;
+ __builtin_va_start(vl, x);
+ enum A t = __builtin_va_arg(vl, enum A); // { dg-warning "promote" }
+ __builtin_va_end(vl);
+}
+
+int main() {
+ foo(0, A::X); // { dg-warning "will not promote" }
+}
+
+// { dg-prune-output "note" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum14.C
new file mode 100644
index 0000000..2be758d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum14.C
@@ -0,0 +1,12 @@
+// PR c++/48106
+// { dg-do compile { target c++11 } }
+
+enum class E : char
+{
+ e
+};
+
+bool operator&(E e, char m)
+{
+ return static_cast<int>(e) & m;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum15.C
new file mode 100644
index 0000000..07beee5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum15.C
@@ -0,0 +1,20 @@
+// PR c++/44311
+// { dg-do compile { target c++11 } }
+
+enum class A { Val0, Val1 };
+
+void foo (A a, int i)
+{
+ switch (a)
+ {
+ case A::Val0: break;
+ case 1: break; // { dg-error "" }
+ }
+
+ switch (i)
+ {
+ case A::Val0: break; // { dg-error "" }
+ case 1: break;
+ case 2.0: break; // { dg-error "" }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum16.C
new file mode 100644
index 0000000..207fcab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum16.C
@@ -0,0 +1,6 @@
+// PR c++/48935
+// { dg-do compile { target c++11 } }
+
+enum class ENUM { a };
+
+ENUM::Type func() { return ENUM::a; } // { dg-error "does not name a type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum17.C
new file mode 100644
index 0000000..32c4609
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum17.C
@@ -0,0 +1,17 @@
+// PR c++/48536
+// { dg-do compile { target c++11 } }
+
+#include <climits>
+
+// According to C++11 / Clause 7.2/5 the following enumeration is
+// well-formed. It is also well-formed in C++03 if UINT_MAX < ULONG_MAX,
+// but C++11 adds long long.
+
+enum Enum_Inc { EI_1=UINT_MAX, EI_2 }; // #1
+
+// It is not equivalent to the following.
+enum Enum_Inc2 { FI_1=UINT_MAX, FI_2=FI_1+1 }; // #2
+
+#define SA(X) static_assert(X,#X)
+SA (EI_2 != 0);
+SA (FI_2 == 0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum18.C
new file mode 100644
index 0000000..de16596
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum18.C
@@ -0,0 +1,8 @@
+// PR c++/47277
+// { dg-do compile { target c++11 } }
+
+int main(void) {
+ enum e {};
+ e ev;
+ ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum19.C
new file mode 100644
index 0000000..b04fd52
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum19.C
@@ -0,0 +1,13 @@
+// We shouldn't give an ABI warning about promotion in switch.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=5 -Wabi" }
+
+enum class Foo { X };
+void test(Foo val)
+{
+ switch(val)
+ {
+ case Foo::X:
+ break;
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum2.C
new file mode 100644
index 0000000..c101134
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum2.C
@@ -0,0 +1,4 @@
+// PR c++/38637
+// { dg-do compile { target c++11 } }
+
+template<int> enum E : int { e }; // { dg-error "declaration|expected" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum20.C
new file mode 100644
index 0000000..8937cc7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum20.C
@@ -0,0 +1,5 @@
+// PR c++/47635
+// { dg-do compile { target c++11 } }
+
+enum A { };
+void A::f() { } // { dg-error "not a class" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21a.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21a.C
new file mode 100644
index 0000000..5526811
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21a.C
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-pedantic -std=c++98" }
+
+enum x { y, }; // { dg-warning "comma at end of enumerator list" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21b.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21b.C
new file mode 100644
index 0000000..ac449f0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum21b.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+enum x { y, };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum22.C
new file mode 100644
index 0000000..e87a31c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum22.C
@@ -0,0 +1,12 @@
+// PR c++/56155
+// { dg-do compile { target c++11 } }
+
+enum e_ : unsigned char { Z_, E_=sizeof(Z_) };
+static_assert( E_ == 1, "E_ should be 1");
+
+template <class T>
+struct A {
+ enum e_ : unsigned char { Z_, E_=sizeof(Z_) };
+};
+
+static_assert ( A<double>::E_ == 1, "E_ should be 1");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum23.C
new file mode 100644
index 0000000..b2378e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum23.C
@@ -0,0 +1,9 @@
+// PR c++/51242
+// { dg-do compile { target c++11 } }
+
+enum class MyEnum { A = 1 };
+
+struct MyClass
+{
+ MyEnum Field1 : 3; // { dg-bogus "warning: 'MyClass::Field1' is too small" "" { xfail *-*-* } }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum24.C
new file mode 100644
index 0000000..6099656
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum24.C
@@ -0,0 +1,57 @@
+// PR c++/56749
+// { dg-require-effective-target c++11 }
+
+enum normal_enum
+{
+ not_scoped1,
+ not_scoped2
+};
+
+enum class scoped_enum
+{
+ scoped1,
+ scoped2
+};
+
+template <normal_enum N=not_scoped1>
+class A
+{
+public:
+ template <typename T>
+ void fun ()
+ {
+ }
+};
+
+template <scoped_enum N=scoped_enum::scoped1>
+class B
+{
+public:
+ template <typename T>
+ void fun ()
+ {
+ }
+};
+
+
+template <typename T>
+void tfun ()
+{
+ A<> a;
+ a.fun<char>(); //<------------ THIS IS FINE
+
+ B<> b_defaulted;
+ B<scoped_enum::scoped1> b_explicited;
+
+ b_defaulted.fun<char>(); //<------------ UNEXPECTED: THIS FAILS
+ b_defaulted.template fun<char>(); //<------------ THIS IS FINE
+
+ b_explicited.fun<char>(); //<------------ UNEXPECTED: THIS FAILS
+ b_explicited.template fun<char>();//<------------ THIS IS FINE
+}
+
+int main(int argc, char const *argv[])
+{
+ tfun<int>();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum25.C
new file mode 100644
index 0000000..cb2cf8f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum25.C
@@ -0,0 +1,18 @@
+// PR c++/56793
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ enum struct B {X, Y} b;
+} a;
+
+enum struct D {X,Y};
+struct C { } c;
+
+int main ()
+{
+ if (a.b == a.B::Y)
+ a.b = A::B::X;
+
+ c.D::Y; // { dg-error "not a member" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum26.C
new file mode 100644
index 0000000..cfc5df3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum26.C
@@ -0,0 +1,9 @@
+// PR c++/54216
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+enum {}; // { dg-warning "empty anonymous" }
+
+enum class {}; // { dg-error "anonymous" }
+
+enum class { x }; // { dg-error "anonymous" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum27.C
new file mode 100644
index 0000000..80ac98f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum27.C
@@ -0,0 +1,4 @@
+// PR c++/53745
+// { dg-do compile { target c++11 } }
+
+enum E : unsigned { e = -1 }; // { dg-error "outside the range" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum28.C
new file mode 100644
index 0000000..3967699
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum28.C
@@ -0,0 +1,17 @@
+// PR c++/51912
+// { dg-do compile { target c++11 } }
+
+constexpr double g() { return 2.0; }
+
+void f(int i)
+{
+ switch (i)
+ {
+ case 1.0:; // { dg-error "could not convert" }
+ }
+
+ switch (i)
+ {
+ case g():; // { dg-error "could not convert" }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum3.C
new file mode 100644
index 0000000..940bc04
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum3.C
@@ -0,0 +1,26 @@
+// PR c++/38064
+// { dg-do run { target c++11 } }
+
+enum class E { elem };
+
+template <class T>
+void f (T t);
+
+bool f (bool b) { return b; }
+
+int main()
+{
+ E e = E::elem;
+ if (!f (e == E::elem))
+ return 1;
+ if (!f (e <= E::elem))
+ return 1;
+ if (!f (e >= E::elem))
+ return 1;
+ if (f (e < E::elem))
+ return 1;
+ if (f (e > E::elem))
+ return 1;
+ if (f (e != E::elem))
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum4.C
new file mode 100644
index 0000000..9e908c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum4.C
@@ -0,0 +1,8 @@
+// PR c++/40633
+// { dg-do compile { target c++11 } }
+
+template< typename T >
+struct wrap {
+ enum class E { val };
+};
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum5.C
new file mode 100644
index 0000000..f896440
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum5.C
@@ -0,0 +1,20 @@
+// PR c++/40639
+// { dg-do compile { target c++11 } }
+
+template< typename T >
+struct wrap {
+ enum E : T { val };
+};
+
+template< typename T >
+struct dependant {
+ enum E : typename T::type { val };
+};
+
+template<typename T>
+struct identity {
+ typedef T type;
+};
+
+wrap<int> x;
+dependant<identity<int>> y;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum6.C
new file mode 100644
index 0000000..c3832ae
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum6.C
@@ -0,0 +1,15 @@
+// PR c++/37946
+// { dg-do compile { target c++11 } }
+
+enum class E : char
+{
+ e1,
+ e2
+};
+
+inline E operator| (E a1, E a2)
+{
+ char ret = static_cast<char> (a1)
+ | static_cast<char> (a2);
+ return static_cast<E>(ret);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum7.C
new file mode 100644
index 0000000..6788f8a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum7.C
@@ -0,0 +1,11 @@
+// PR c++/37816
+// { dg-do compile { target c++11 } }
+
+class A
+{
+ enum class Color { Red, Orange, Yellow, Green, Blue, Violet };
+ enum class Alert { Green, Yellow, Red };
+ static const Color x = Red; // { dg-error "" }
+ static const Color y = Color::Red;
+ static const Alert z = Alert::Red;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum8.C
new file mode 100644
index 0000000..15bee83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum8.C
@@ -0,0 +1,9 @@
+// PR c++/47704
+// { dg-do compile { target c++11 } }
+
+void
+foo ()
+{
+ enum class E { A, B };
+ new E;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum9.C
new file mode 100644
index 0000000..f359b42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum9.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+enum class E { };
+E f();
+bool b2 = static_cast<bool>(f());
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base.C
new file mode 100644
index 0000000..8e23179
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+
+typedef unsigned volatile long long uvlonglong;
+
+enum E1 : char { };
+enum E2 : signed const short { };
+enum E3 : uvlonglong { };
+enum E4 : char {
+ val = 500 // { dg-error "outside the range" }
+};
+
+enum class E5 {
+ val = (unsigned long long)-1 // { dg-error "outside the range" }
+};
+
+typedef float Float;
+
+enum class E6 : Float { }; // { dg-error "must be an integral type" }
+
+static_assert (sizeof(E1) == sizeof(char), "char-sized enum");
+static_assert (sizeof(E2) == sizeof(signed short), "short-sized enum");
+static_assert (sizeof(E3) == sizeof(unsigned long long),
+ "long long-sized enum");
+static_assert (sizeof(E4) == sizeof(char), "char-sized enum");
+static_assert (sizeof(E5) == sizeof(int), "scoped enum with int size");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
new file mode 100644
index 0000000..8c6a901
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
@@ -0,0 +1,9 @@
+// PR c++/60187
+// { dg-require-effective-target c++11 }
+
+template<typename... T> struct A
+{
+ enum E : T {}; // { dg-error "parameter pack" }
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C
new file mode 100644
index 0000000..82878a6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/enum_base_warn.C
@@ -0,0 +1,25 @@
+// { dg-do run { target c++11 } }
+// { dg-options "-O2 -Wtype-limits" }
+extern void link_error (void);
+
+enum Alpha : unsigned char {
+ ZERO = 0, ONE, TWO, THREE
+};
+
+Alpha a2;
+
+int m1 = -1;
+int GetM1() {
+ return m1;
+}
+
+int main() {
+ a2 = static_cast<Alpha>(GetM1());
+ if (a2 == -1) { // { dg-warning "always false due" }
+ link_error ();
+ }
+ if (-1 == a2) { // { dg-warning "always false due" }
+ link_error ();
+ }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error1.C
new file mode 100644
index 0000000..33557f2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error1.C
@@ -0,0 +1,10 @@
+// PR c++/34395
+// { dg-do compile { target c++11 } }
+
+template<int... N> void foo (int... x[N]) // { dg-message "int \\\[N\\\]\\.\\.\\. x" }
+{
+ struct A
+ {
+ A () { x; } // { dg-error "use of parameter from containing function" }
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error2.C
new file mode 100644
index 0000000..e6af294
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error2.C
@@ -0,0 +1,9 @@
+// PR c++/38656
+// { dg-do compile { target c++11 } }
+
+template<int> int foo();
+
+template<typename F> void bar(F f)
+{
+ f((foo<0>()=0)...); // { dg-error "pattern '\\(foo\\<0\\>\\)\\(\\)=0'" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error3.C
new file mode 100644
index 0000000..75390f0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error3.C
@@ -0,0 +1,24 @@
+// PR c++/47336
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+void g(T t)
+{
+ t+1; // { dg-error "no match" }
+}
+
+template <typename S>
+class C
+{
+ struct D {} d;
+public:
+ decltype(g(d)) h()
+ {
+ return g(d);
+ }
+};
+
+int main()
+{
+ C<int>().h();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error4.C
new file mode 100644
index 0000000..bd73b2a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error4.C
@@ -0,0 +1,22 @@
+// PR c++/49156
+// { dg-do compile { target c++11 } }
+
+template<typename T> T declval();
+
+template<typename T>
+struct S {
+
+ template<typename U>
+ static U get(const volatile T&);
+
+ template<typename U>
+ static decltype(*declval<U>()) get(...); // { dg-error "operator*" }
+
+ typedef decltype(get<T>(declval<T>())) type; // { dg-error "no match" }
+};
+
+struct X { };
+
+S<X>::type x;
+
+// { dg-prune-output "note" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C
new file mode 100644
index 0000000..e46c46d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C
@@ -0,0 +1,107 @@
+// PR c++/49181
+// { dg-do compile { target c++11 } }
+
+namespace std
+{
+ typedef __SIZE_TYPE__ size_t;
+
+ template<typename _Tp, _Tp>
+ struct integral_constant;
+
+ template<typename _Tp, _Tp __v>
+ struct integral_constant
+ {
+ static constexpr _Tp value = __v;
+ typedef _Tp value_type;
+ typedef integral_constant<_Tp, __v> type;
+ constexpr operator value_type() { return value; }
+ };
+
+ typedef integral_constant<bool, true> true_type;
+
+ typedef integral_constant<bool, false> false_type;
+
+ template<typename _Tp, _Tp __v>
+ constexpr _Tp integral_constant<_Tp, __v>::value;
+
+ template<bool, typename _Tp = void>
+ struct enable_if
+ { };
+
+ template<typename _Tp>
+ struct enable_if<true, _Tp>
+ { typedef _Tp type; };
+
+ template<typename _Tp>
+ inline _Tp
+ declval();
+
+struct bad_alloc { };
+}
+
+void* operator new(std::size_t) throw (std::bad_alloc);
+
+namespace std
+{
+
+ template<typename _Tp>
+ class allocator
+ {
+ public:
+ typedef _Tp* pointer;
+ typedef _Tp value_type;
+
+ pointer
+ allocate(size_t, const void* = 0);
+ };
+
+ template<typename _Alloc>
+ struct allocator_traits
+ {
+ typedef typename _Alloc::value_type value_type;
+
+ template<typename _Tp> static typename _Tp::pointer
+_S_pointer_helper(_Tp*);
+ static value_type* _S_pointer_helper(...);
+ typedef decltype(_S_pointer_helper((_Alloc*)0)) __pointer;
+
+ typedef __pointer pointer;
+
+ typedef const void* const_void_pointer;
+
+ private:
+ template<typename _Alloc2>
+ struct __allocate_helper
+ {
+ template<typename _Alloc3,
+ typename = decltype(std::declval<_Alloc3*>()->allocate(
+ std::declval<size_t>(),
+ std::declval<const_void_pointer>()))>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc>(0)) type;
+ static const bool value = type::value;
+ };
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<__allocate_helper<_Alloc2>::value, pointer>::type
+ _S_allocate(_Alloc2& __a, size_t __n, const_void_pointer __hint)
+ { return __a.allocate(__n, __hint); }
+
+ public:
+ static pointer
+ allocate(_Alloc& __a, size_t __n, const_void_pointer __hint)
+ { return _S_allocate(__a, __n, __hint); }
+ };
+
+}
+
+namespace std
+{
+ typedef short test_type;
+ template struct allocator_traits<allocator<test_type>>;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error6.C
new file mode 100644
index 0000000..515f8f5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error6.C
@@ -0,0 +1,8 @@
+// PR c++/48284
+// { dg-do compile { target c++11 } }
+
+template<typename C>
+auto g(C& c) -> decltype (c.f()) { return c.f(); } // { dg-message "decltype .c\\.f" }
+
+template<typename C>
+auto g(C& c) -> decltype (c.f()) { return c.f(); } // { dg-error "decltype .c\\.f" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error7.C
new file mode 100644
index 0000000..3c9b8ba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error7.C
@@ -0,0 +1,10 @@
+// Test for printing the type of T{} in error messages.
+// { dg-do compile { target c++11 } }
+
+template <class T, T t> struct A { };
+template <class T> A<T,T{}> f(T t); // { dg-message "T{}" }
+
+int main()
+{
+ f(); // { dg-error "no match" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error8.C
new file mode 100644
index 0000000..a992077
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error8.C
@@ -0,0 +1,7 @@
+// PR c++/39681
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int* p = new foo; // { dg-error "16:foo. does not name a type" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit1.C
new file mode 100644
index 0000000..ea4fa8a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit1.C
@@ -0,0 +1,58 @@
+// Test for explicit conversion ops from N2437.
+// { dg-do compile { target c++11 } }
+
+class U; class V;
+class T
+{
+public:
+ T( U const & );
+ //implicit converting ctor
+ explicit T( V const & );
+ // explicit ctor
+};
+class U
+{
+};
+class V
+{
+};
+class W
+{
+public:
+ operator T() const;
+};
+class X
+{
+public:
+ explicit operator T() const; // theoretical
+};
+int main()
+{
+ U u; V v; W w; X x;
+ // Direct initialization:
+ T t1( u );
+ T t2( v );
+ T t3( w );
+ T t4( x );
+ // Copy initialization:
+ T t5 = u;
+ T t6 = v; // { dg-error "" }
+ T t7 = w;
+ T t8 = x; // { dg-error "" }
+ // Cast notation:
+ T t9 = (T) u;
+ T t10 = (T) v;
+ T t11 = (T) w;
+ T t12 = (T) x;
+ // Static cast:
+ T t13 = static_cast<T>( u );
+ T t14 = static_cast<T>( v );
+ T t15 = static_cast<T>( w );
+ T t16 = static_cast<T>( x );
+ // Function-style cast:
+ T t17 = T( u );
+ T t18 = T( v );
+ T t19 = T( w );
+ T t20 = T( x );
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit2.C
new file mode 100644
index 0000000..715855c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit2.C
@@ -0,0 +1,29 @@
+// Test for explicit conversion ops in various conversion situations.
+// { dg-do compile { target c++11 } }
+
+typedef void (*pfn)();
+
+struct A
+{
+ explicit operator int() const;
+ explicit operator pfn() const;
+};
+
+int main()
+{
+ A a;
+ int i = a; // { dg-error "" }
+ const int &ir = a; // { dg-error "" }
+ a(); // { dg-error "" }
+ a + 1; // { dg-message "" } (error and note on same line)
+
+ int j (a);
+ (int)a;
+ static_cast<int>(a);
+}
+
+struct B
+{
+ int i;
+ B(const A& a): i(a) { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit3.C
new file mode 100644
index 0000000..678076c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit3.C
@@ -0,0 +1,50 @@
+// Test for "contextually converted to bool"
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ explicit operator bool();
+};
+
+void f (bool);
+
+struct B
+{
+ bool b;
+};
+
+struct C
+{
+ operator int();
+};
+
+struct D
+{
+ operator int();
+};
+
+int main()
+{
+ A a; C c; D d;
+ // These contexts use an explicit bool conversion.
+ if (a) {}
+ for (; a; ) {}
+ do {} while (a);
+ while (a) {}
+ a ? 1 : 0;
+ a || true;
+ a && true;
+ !a;
+
+ a ? c : 1;
+ a ? c : d;
+
+ // These do not.
+ switch (a); // { dg-error "" }
+ bool b = a; // { dg-error "" }
+ f(a); // { dg-error "" }
+ B b2 = { a }; // { dg-error "" }
+ a + true; // { dg-error "5:no match" }
+ b ? a : true; // { dg-error "5:no match" }
+ a ? a : true; // { dg-error "5:no match" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit4.C
new file mode 100644
index 0000000..663878e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit4.C
@@ -0,0 +1,18 @@
+// Negative explicit conv test.
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A(const A&, int = 0); // { dg-message "note" }
+};
+struct B
+{
+ explicit operator A();
+};
+
+int main()
+{
+ B b;
+ (A(b)); // OK
+ (A(b,1)); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 16 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit5.C
new file mode 100644
index 0000000..1adb8d6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit5.C
@@ -0,0 +1,24 @@
+// test for extension of DR 899 to handle template ctors
+// { dg-do run { target c++11 } }
+
+int r = 1;
+
+struct C {
+ C() { }
+ template <class T = int> C(C&, T = 0) { r = 0; }
+};
+
+C c;
+
+struct A
+{
+ explicit operator C&() const { return c; }
+};
+
+int main()
+{
+ A a;
+ C c2 (a);
+
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit6.C
new file mode 100644
index 0000000..18f31b4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit6.C
@@ -0,0 +1,12 @@
+// PR c++/47080
+// { dg-options "" }
+// { dg-do compile { target c++11 } }
+
+struct A {
+ explicit operator int(); // { dg-message "qualification conversion" }
+};
+
+int main() {
+ bool b((A())); // { dg-error "invalid user-defined" }
+ !A(); // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit7.C
new file mode 100644
index 0000000..574796d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/explicit7.C
@@ -0,0 +1,18 @@
+// [over.match.conv]: For direct-initialization, those explicit conversion
+// functions that are not hidden within S and yield type T or a type that
+// can be converted to type T with a qualification conversion (4.4) are
+// also candidate functions.
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+struct A { };
+struct B: A { };
+struct C {
+ explicit operator B*(); // { dg-message "explicit" }
+ explicit operator B&(); // { dg-message "explicit" }
+};
+
+C c;
+A* ap (c); // { dg-error "" }
+A& ar (c); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-1.C
new file mode 100644
index 0000000..2779a2b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-1.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+template <typename> void f() {}
+extern template void f<int>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-2.C
new file mode 100644
index 0000000..3eb870b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-2.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+template <typename> class S {};
+extern template class S<int>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-3.C
new file mode 100644
index 0000000..1b7ad0e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/extern_template-3.C
@@ -0,0 +1,16 @@
+// PR c++/37256
+// { dg-options "-O" }
+
+template <typename T_>
+struct B
+{
+ T_ f();
+};
+
+extern template class B<int>;
+
+void f()
+{
+ B<int> t;
+ t.f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C
new file mode 100644
index 0000000..3081d67
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C
@@ -0,0 +1,7 @@
+// PR c++/37766
+// { dg-do compile { target c++11 } }
+
+int a = 1;
+template<int& b = a> void f() {
+ f<>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C
new file mode 100644
index 0000000..663f400
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C
@@ -0,0 +1,25 @@
+// PR c++/46831
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+struct B { };
+struct D : B { };
+struct A {
+ template<typename T = void> operator D&(); // { dg-message "template conversion" }
+ operator long();
+};
+
+void f(long);
+void f(B&);
+
+struct A2 {
+ template<typename T = void> operator B&();
+};
+
+void f2(const B&);
+
+int main() {
+ f(A());
+ f2(A2());
+ f2(A()); // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg3.C
new file mode 100644
index 0000000..8e9b76f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg3.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+
+template <class T, class = typename T::I> void f(T) {}
+template <class T, class = typename T::I> void g(T) {}
+template <class T, class = typename T::I> void h(T) {}
+template <class T, class = typename T::I> void i(T) {}
+template <class T, class = typename T::I> void j(T) {} // { dg-error "this context" }
+
+class A
+{
+ typedef int I; // { dg-error "private" }
+ template <class T, class> friend void f(T);
+ friend void g<A,I>(A);
+ friend void h<A>(A);
+ friend void i<>(A);
+};
+
+int main()
+{
+ A a;
+ f(a);
+ g(a);
+ h(a);
+ i(a);
+ j(a); // { dg-error "no match" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C
new file mode 100644
index 0000000..52e6f38
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C
@@ -0,0 +1,6 @@
+// PR c++/55724
+// { dg-do compile { target c++11 } }
+
+template<int N> struct S {};
+template<typename T = int, T N> void f(S<N>) {}
+int main() { S<1> s; f(s); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg5.C
new file mode 100644
index 0000000..0821fc0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg5.C
@@ -0,0 +1,17 @@
+// Only print template subst context when it isn't redundant.
+// { dg-require-effective-target c++11 }
+// { dg-prune-output "error" }
+
+template<class T> struct A { typedef typename T::type type; };
+
+template <class T, class U = typename A<T>::type>
+void f(T);
+
+template <class T, class U = typename T::type>
+void g(T);
+
+int main()
+{
+ f(1); // { dg-message "required from here" }
+ g(1); // { dg-bogus "required from here" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum1.C
new file mode 100644
index 0000000..7ec5884
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum1.C
@@ -0,0 +1,44 @@
+// { dg-do compile { target c++11 } }
+
+// opaque enum declarations
+enum class E1;
+enum class E2 : int;
+enum class E3 : short;
+enum E4 : int;
+enum E5 : short;
+
+// can be repeated
+enum class E1;
+enum class E2 : int;
+enum class E3 : short;
+enum E4 : int;
+enum E5 : short;
+
+// are complete so we can declare variables
+E1 b1;
+E2 b2;
+E3 b3;
+E4 b4;
+E5 b5;
+
+//even with elaborated-type-specifiers
+enum E1 a1;
+enum E2 a2;
+enum E3 a3;
+enum E4 a4;
+enum E5 a5;
+
+// and the list can be added later
+enum class E1 { e11, e12 };
+enum class E2 : int { e21, e22 };
+enum class E3 : short {e31, e32 };
+enum E4 : int { e41, e42 };
+enum E5 : short { e51, e52 };
+
+// more repetitions allowed
+enum class E1;
+enum class E2 : int;
+enum class E3 : short;
+enum E4 : int;
+enum E5 : short;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum10.C
new file mode 100644
index 0000000..609c272
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum10.C
@@ -0,0 +1,30 @@
+// { dg-do compile { target c++11 } }
+
+//This error is diagnosed at instantiation time
+template<typename T> struct S1
+{
+ enum E : T; // { dg-error "previous definition" }
+ enum E : int; // { dg-error "different underlying type" }
+};
+template struct S1<short>; // { dg-message "required from here" }
+
+template<typename T> struct S2
+{
+ enum E : T;
+ enum E : T;
+};
+template struct S2<short>;
+
+template<typename T1, typename T2> struct S3
+{
+ enum E : T1;
+ enum E : T2;
+};
+template struct S3<short,short>;
+
+template<typename T1, typename T2> struct S4
+{
+ enum E : T1; // { dg-error "previous definition" }
+ enum E : T2; // { dg-error "different underlying type" }
+};
+template struct S4<short,char>; // { dg-message "required from here" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum11.C
new file mode 100644
index 0000000..8cabc03
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum11.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+
+enum { A = 1 };
+struct T
+{
+ int i1, i2, i3, i4, i5, i6, i7;
+ enum E2 : int;
+
+ void f();
+};
+
+enum T::E2 : int { A1 = A, A2 = 23 };
+
+static_assert(int(T::A1) == 1, "error");
+static_assert(int(T::A2) == 23, "error");
+
+void T::f()
+{
+ static_assert(int(T::A1) == 1, "error");
+ static_assert(int(T::A2) == 23, "error");
+ static_assert(int(A1) == 1, "error");
+ static_assert(int(A2) == 23, "error");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum2.C
new file mode 100644
index 0000000..b8f062e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum2.C
@@ -0,0 +1,43 @@
+// { dg-do compile { target c++11 } }
+
+struct S1
+{
+ struct S2
+ {
+ // opaque enum declarations
+ enum class E1;
+ enum class E2 : int;
+ enum class E3 : short;
+ enum E4 : int;
+ enum E5 : short;
+
+ // can be repeated
+ enum class E1;
+ enum class E2 : int;
+ enum class E3 : short;
+ enum E4 : int;
+ enum E5 : short;
+ };
+};
+
+// are complete so we can declare variables
+S1::S2::E1 b1;
+S1::S2::E2 b2;
+S1::S2::E3 b3;
+S1::S2::E4 b4;
+S1::S2::E5 b5;
+
+//even with elaborated-type-specifiers
+enum S1::S2::E1 a1;
+enum S1::S2::E2 a2;
+enum S1::S2::E3 a3;
+enum S1::S2::E4 a4;
+enum S1::S2::E5 a5;
+
+// and the list can be added later
+enum class S1::S2::E1 { e11, e12 };
+enum class S1::S2::E2 : int { e21, e22 };
+enum class S1::S2::E3 : short {e31, e32 };
+enum S1::S2::E4 : int { e41, e42 };
+enum S1::S2::E5 : short { e51, e52 };
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum3.C
new file mode 100644
index 0000000..c8cd6f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum3.C
@@ -0,0 +1,43 @@
+// { dg-do compile { target c++11 } }
+
+namespace S1
+{
+ namespace S2
+ {
+ // opaque enum declarations
+ enum class E1;
+ enum class E2 : int;
+ enum class E3 : short;
+ enum E4 : int;
+ enum E5 : short;
+
+ // can be repeated
+ enum class E1;
+ enum class E2 : int;
+ enum class E3 : short;
+ enum E4 : int;
+ enum E5 : short;
+ }
+}
+
+// are complete so we can declare variables
+S1::S2::E1 b1;
+S1::S2::E2 b2;
+S1::S2::E3 b3;
+S1::S2::E4 b4;
+S1::S2::E5 b5;
+
+//even with elaborated-type-specifiers
+enum S1::S2::E1 a1;
+enum S1::S2::E2 a2;
+enum S1::S2::E3 a3;
+enum S1::S2::E4 a4;
+enum S1::S2::E5 a5;
+
+// and the list can be added later
+enum class S1::S2::E1 { e11, e12 };
+enum class S1::S2::E2 : int { e21, e22 };
+enum class S1::S2::E3 : short {e31, e32 };
+enum S1::S2::E4 : int { e41, e42 };
+enum S1::S2::E5 : short { e51, e52 };
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum4.C
new file mode 100644
index 0000000..aee916e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum4.C
@@ -0,0 +1,44 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct S1
+{
+ struct S2
+ {
+ // opaque enum declarations
+ enum class E1;
+ enum class E2 : T;
+ enum class E3 : short;
+ enum E4 : T;
+ enum E5 : short;
+
+ // can be repeated
+ enum class E1;
+ enum class E2 : T;
+ enum class E3 : short;
+ enum E4 : T;
+ enum E5 : short;
+ };
+
+ // are complete so we can declare variables
+ typename S2::E1 b1;
+ typename S2::E2 b2;
+ typename S2::E3 b3;
+ typename S2::E4 b4;
+ typename S2::E5 b5;
+
+ //even with elaborated-type-specifiers
+ enum S1::S2::E1 a1;
+ enum S1::S2::E2 a2;
+ enum S1::S2::E3 a3;
+ enum S1::S2::E4 a4;
+ enum S1::S2::E5 a5;
+
+ // and the list can be added later
+ enum class S1::S2::E1 { e11, e12 };
+ enum class S1::S2::E2 : T { e21, e22 };
+ enum class S1::S2::E3 : short {e31, e32 };
+ enum S1::S2::E4 : T { e41, e42 };
+ enum S1::S2::E5 : short { e51, e52 };
+};
+
+template struct S1<int>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum5.C
new file mode 100644
index 0000000..d1d6230
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum5.C
@@ -0,0 +1,62 @@
+// { dg-do compile { target c++11 } }
+
+namespace one
+{
+ struct S
+ {
+ enum { A = 1, B = 2 };
+ struct T
+ {
+ enum { B = 102 };
+
+ enum class E1;
+ enum E2 : int;
+ };
+ };
+
+ enum class S::T::E1 { A1 = A, B1 = B, C1 };
+ enum S::T::E2 : int { A1 = A, B1 = B, C1 };
+
+ static_assert(int(S::T::E1::A1) == 1, "error");
+ static_assert(int(S::T::E1::B1) == 102, "error");
+ static_assert(int(S::T::E1::C1) == 103, "error");
+
+ static_assert(int(S::T::E2::A1) == 1, "error");
+ static_assert(int(S::T::E2::B1) == 102, "error");
+ static_assert(int(S::T::E2::C1) == 103, "error");
+ static_assert(int(S::T::A1) == 1, "error");
+ static_assert(int(S::T::B1) == 102, "error");
+ static_assert(int(S::T::C1) == 103, "error");
+}
+
+
+namespace two
+{
+ namespace S
+ {
+ enum { A = 1, B = 2 };
+ namespace T
+ {
+ enum { B = 102 };
+
+ enum class E1;
+ enum E2 : int;
+ }
+ }
+
+ enum class S::T::E1 { A1 = A, B1 = B, C1 };
+ enum S::T::E2 : int { A1 = A, B1 = B, C1 };
+
+ static_assert(int(S::T::E1::A1) == 1, "error");
+ static_assert(int(S::T::E1::B1) == 102, "error");
+ static_assert(int(S::T::E1::C1) == 103, "error");
+
+ static_assert(int(S::T::E2::A1) == 1, "error");
+ static_assert(int(S::T::E2::B1) == 102, "error");
+ static_assert(int(S::T::E2::C1) == 103, "error");
+ static_assert(int(S::T::A1) == 1, "error");
+ static_assert(int(S::T::B1) == 102, "error");
+ static_assert(int(S::T::C1) == 103, "error");
+}
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum6.C
new file mode 100644
index 0000000..ccce13a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum6.C
@@ -0,0 +1,73 @@
+// { dg-do compile { target c++11 } }
+
+enum class E1 : int; // { dg-error "previous definition" }
+enum E1 : int; // { dg-error "scoped/unscoped mismatch" }
+
+enum E2 : int; // { dg-error "previous definition" }
+enum class E2 : int; // { dg-error "scoped/unscoped mismatch" }
+
+enum struct E3 : int;
+enum class E3 : int; //ok
+
+enum class E4 : int; // { dg-error "previous definition" }
+enum class E4 : long; // { dg-error "different underlying type" }
+
+enum E5 : int; // { dg-error "previous definition" }
+enum E5 : long; // { dg-error "different underlying type" }
+
+enum E6 : int;
+enum E6 : int; //ok
+
+enum class E7;
+enum class E7 : int; //ok
+
+enum class E3 e3; // { dg-error "scoped enum must not use" }
+enum struct E3 e4; // { dg-error "scoped enum must not use" }
+enum E5 : int e5; // { dg-error "expected|invalid type" }
+
+enum E6 : int { a, b, c }; // { dg-error "previous definition" }
+enum E6 : int { a, b, c }; // { dg-error "multiple definition" }
+
+enum class E7 { }; // { dg-error "previous definition" }
+enum class E7 { a, b, c }; // { dg-error "multiple definition" }
+
+namespace N1
+{
+ struct D;
+ enum class E6;
+ enum E7 : int;
+}
+
+enum class N1::E6; // { dg-error "must use a simple identifier" }
+enum N1::E6 e6_1; //ok
+enum ::N1::E6 e6_2; //ok
+
+namespace N2
+{
+ enum class N1::E6 { e1, e2, e3 }; // { dg-error "does not enclose" }
+ enum N1::E7 : int { e1, e2, e3 }; // { dg-error "does not enclose" }
+}
+
+enum class N1::E6 { e1, e2, e3 };
+enum N1::E7 : int { e1, e2, e3 };
+
+struct S1
+{
+ struct D;
+ enum class E6;
+ enum E7 : int;
+};
+
+enum class S1::E6; // { dg-error "must use a simple identifier" }
+enum S1::E6 e6_3; //ok
+enum ::S1::E6 e6_4; //ok
+
+struct S2
+{
+ enum class S1::E6 { e1, e2, e3 }; // { dg-error "does not enclose" }
+ enum S1::E7 : int { e1, e2, e3 }; // { dg-error "does not enclose" }
+};
+
+enum class S1::E6 { e1, e2, e3 };
+enum S1::E7 : int { e1, e2, e3 };
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum7.C
new file mode 100644
index 0000000..3c67f54
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum7.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template<typename T> struct S1
+{
+ enum E1 : int;
+ enum E1 : T;
+ enum class E2 : int;
+ enum class E2 : T;
+};
+
+template<typename T> enum S1<T>::E1 : int { e1 };
+template<typename T> enum class S1<T>::E2 : T { e2 };
+
+S1<int>::E1 x1 = S1<int>::e1;
+S1<int>::E1 x11 = S1<int>::E1::e1;
+S1<int>::E2 x2 = S1<int>::E2::e2;
+
+enum S1<int>::E1 ex1 = S1<int>::e1;
+enum S1<int>::E1 ex11 = S1<int>::E1::e1;
+enum S1<int>::E2 ex2 = S1<int>::E2::e2;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C
new file mode 100644
index 0000000..5174226
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+
+//This instatiation is ok
+template<typename T> struct S1
+{
+ enum E : int;
+ enum E : T;
+};
+template struct S1<int>; //ok
+
+//This error is diagnosed at instantiation time
+template<typename T> struct S2
+{
+ enum E : int; // { dg-error "previous definition" }
+ enum E : T; // { dg-error "different underlying type" }
+};
+template struct S2<short>; // { dg-message "required from here" }
+
+//This error is diagnosed at compilation time
+template<typename T> struct S3
+{
+ enum E : int; // { dg-error "previous definition" }
+ enum E : short; // { dg-error "different underlying type" }
+};
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum9.C
new file mode 100644
index 0000000..4f1475a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/forw_enum9.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template<typename T> struct S1
+{
+ enum E1 : int;
+ enum class E2 : int;
+};
+
+template<typename T> enum S1<T>::E1 : int { e1 };
+template<typename T> enum class S1<T>::E2 : T { e2 };
+
+template<> enum S1<int>::E1 : int { i1 };
+template<> enum class S1<int>::E2 : int { i2 };
+
+S1<char>::E1 xci = S1<char>::e1;
+S1<int>::E1 xi1 = S1<int>::i1;
+
+S1<char>::E2 xc2 = S1<char>::E2::e2;
+S1<int>::E2 xi2 = S1<int>::E2::i2;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend1.C
new file mode 100644
index 0000000..ae2c603
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend1.C
@@ -0,0 +1,22 @@
+// From N1791
+// { dg-do compile { target c++11 } }
+
+class C;
+typedef C Ct;
+class X1 {
+ friend C; // OK: class C is a friend
+};
+
+class X2
+{
+ friend Ct; // OK: class C is a friend
+ friend D; // { dg-error "" } no type-name D in scope
+ friend class D; // OK: elaborated-type-specifier declares new class
+};
+
+template <typename T> class R {
+ friend T;
+};
+
+R<C> rc; // class C is a friend of R<C>
+R<int> Ri; // OK: "friend int;" is ignored
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend2.C
new file mode 100644
index 0000000..c4df8a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/friend2.C
@@ -0,0 +1,40 @@
+// PR c++/47721
+// { dg-do compile { target c++11 } }
+
+// template type parameter friend:
+
+template<class W>
+class Q
+{
+ static const int I = 2;
+public:
+ friend W;
+};
+
+struct B
+{
+ int ar[Q<B>::I];
+};
+
+// bonus template template parameter friend:
+
+template <class T> struct A;
+
+template<template <class> class W>
+class P
+{
+ static const int I = 2;
+public:
+ // I'm not sure this is well-formed, but I can't find anything
+ // that says otherwise.
+ template <class T> friend class W;
+};
+
+template <class T>
+struct A
+{
+ int ar[P<A>::I];
+};
+
+A<int> a;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-1.C
new file mode 100644
index 0000000..a55698c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-1.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+
+int **** [[gnu::format(printf, 1, 2)]] foo(const char *, ...); // { dg-warning "ignored" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-10.C
new file mode 100644
index 0000000..cac568e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-10.C
@@ -0,0 +1,9 @@
+// PR c++/12795
+// { dg-do compile { target c++11 } }
+// { dg-require-alias "" }
+
+void foo()
+{
+ extern void bar [[gnu::__alias__ ("BAR")]] (); // { dg-warning "ignored" }
+ bar ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-11.C
new file mode 100644
index 0000000..504b456
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-11.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+// PR c++/13791
+
+template <typename T> struct O {
+ struct [[gnu::packed]] I {
+ int i;
+ char c;
+ };
+
+ I* foo();
+};
+
+template <typename T>
+typename O<T>::I*
+O<T>::foo() { return 0; }
+
+template class O<int>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-12.C
new file mode 100644
index 0000000..504b456
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-12.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+// PR c++/13791
+
+template <typename T> struct O {
+ struct [[gnu::packed]] I {
+ int i;
+ char c;
+ };
+
+ I* foo();
+};
+
+template <typename T>
+typename O<T>::I*
+O<T>::foo() { return 0; }
+
+template class O<int>;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-13.C
new file mode 100644
index 0000000..a1b4a84
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-13.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+// PR c++/13854
+
+extern char *rindex [[gnu::__pure__]] (__const char *__s, int __c) throw ();
+extern char *rindex [[gnu::__pure__]] (__const char *__s, int __c) throw ();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-14.C
new file mode 100644
index 0000000..d646d27
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-14.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+// PR c++/13170
+// The bogus attribute is ignored, but was in TYPE_ATTRIBUTES during
+// parsing of the class, causing some variants to have it and some not.
+
+struct [[gnu::bogus]] A // { dg-warning "ignored" "" }
+{
+ virtual ~A();
+ void foo(const A&);
+ void bar(const A&);
+};
+
+void A::foo(const A&) {}
+void A::bar(const A& a) { foo(a); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-15.C
new file mode 100644
index 0000000..bf05dbe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-15.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+// PR c++/15317
+
+struct A
+{
+ A(char);
+};
+A::A([[gnu::unused]] char i2)
+{}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-16.C
new file mode 100644
index 0000000..4adefdb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-16.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+// Origin: <rguenth at tat dot physik dot uni-tuebingen dot de>
+// PR c++/10479: use of non dependent expressions in attributes in templates
+
+template <int i>
+struct foo2 {
+ float bar [[gnu::aligned(alignof(double))]];
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.2.C
new file mode 100644
index 0000000..636f9a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.2.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+// Origin: Benjamin Kosnik <bkoz at gcc dot gnu dot org>
+// PR c++/17743: Attributes applied to typedefs.
+
+struct A {
+ typedef char layout_type[sizeof(double)]
+ [[gnu::aligned(alignof(double)]]); // { dg-error "expected" }
+ layout_type data;
+};
+
+struct B {
+ typedef char layout_type[sizeof(double)];
+ layout_type data [[gnu::aligned(alignof(double))]];
+};
+
+template<bool> struct StaticAssert;
+template<> struct StaticAssert<true> {};
+
+StaticAssert<alignof(A) == alignof(B)> a1;// { dg-error "incomplete type and cannot be defined" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.C
new file mode 100644
index 0000000..566461b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-17.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+// Origin: Benjamin Kosnik <bkoz at gcc dot gnu dot org>
+// PR c++/17743: Attributes applied to typedefs.
+
+struct A {
+ typedef char layout_type[sizeof(double)]
+ [[gnu::aligned(alignof(double))]];
+ layout_type data;
+};
+
+struct B {
+ typedef char layout_type[sizeof(double)];
+ layout_type data [[gnu::aligned(alignof(double))]];
+};
+
+template<bool> struct StaticAssert;
+template<> struct StaticAssert<true> {};
+
+StaticAssert<alignof(A) == alignof(B)> a1;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-18.C
new file mode 100644
index 0000000..3df13e6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-18.C
@@ -0,0 +1,10 @@
+// PR c++/17542
+// Test that we warn when an attribute preceding the class-key is ignored.
+// { dg-do compile { target c++11 } }
+
+[[gnu::packed]] struct A // { dg-warning "attribute" }
+{
+ char c;
+ int x;
+ void f();
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-19.C
new file mode 100644
index 0000000..5ac93d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-19.C
@@ -0,0 +1,11 @@
+// PR c++/19739
+// { dg-do compile { target c++11 } }
+
+void Dummy() [[ , ]];
+void Dummy() {}
+
+int main (int argc, char **argv)
+{
+ Dummy();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2-1.C
new file mode 100644
index 0000000..2f47b32
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2-1.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+
+struct [[gnu::unused]] A {};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2.C
new file mode 100644
index 0000000..8c777c1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-2.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+struct [[gnu::packed]] A
+{
+ void f () const;
+};
+
+void
+A::f () const
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-20.C
new file mode 100644
index 0000000..f989ab2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-20.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-g" }
+// Origin: <jan at etpmod dot phys dot tue dot nl>
+// PR c++/19508: avoid attributes for template parameters
+
+template <typename T>
+struct BVector
+{
+ typedef T T2;
+ typedef T value_type [[gnu::aligned(8)]]; // { dg-bogus "attribute" "attribute" }
+ typedef T2 value_type2 [[gnu::aligned(8)]]; // { dg-bogus "attribute" "attribute" }
+ value_type v;
+};
+BVector<int> m;
+
+template <template <class> class T>
+struct BV2
+{
+ typedef T<float> value_type [[gnu::aligned(8)]]; // { dg-bogus "attribute" "attribute" }
+ value_type v;
+};
+BV2<BVector> m2;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-21.C
new file mode 100644
index 0000000..2d5ad04
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-21.C
@@ -0,0 +1,21 @@
+// PR c++/20763
+// { dg-do compile { target c++11 } }
+
+typedef void *voidp;
+
+struct S
+{
+ char a;
+ voidp b [[gnu::aligned (16)]];
+};
+
+struct T
+{
+ char a;
+ void * b [[gnu::aligned (16)]];
+};
+
+static_assert (sizeof (S) == sizeof (T),
+ "struct S and T should have the same size");
+
+static_assert (sizeof (S) == 32, "sizeof (S) == 8 + 16 + 8");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-22.C
new file mode 100644
index 0000000..4c07df9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-22.C
@@ -0,0 +1,7 @@
+// PR c++/27648
+// { dg-do compile { target c++11 } }
+
+void f()
+{
+ static_cast<float *[[gnu::unused]]>(0); // { dg-warning "ignored" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-23.C
new file mode 100644
index 0000000..57ea6b8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-23.C
@@ -0,0 +1,11 @@
+// PR c++/28112
+// { dg-do compile { target c++11 } }
+
+int i [[gnu::init_priority(;)]]; // { dg-error "before" }
+int j [[gnu::vector_size(;)]]; // { dg-error "before" }
+int k [[gnu::visibility(;)]]; // { dg-error "before" }
+struct A {} [[gnu::aligned(;)]]; // { dg-error "before" }
+struct B {} [[gnu::mode(;)]]; // { dg-error "before" }
+void foo() [[gnu::alias(;)]]; // { dg-error "before" }
+void bar() [[gnu::nonnull(;)]]; // { dg-error "before" }
+void baz() [[gnu::section(;)]]; // { dg-error "before" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-24.C
new file mode 100644
index 0000000..e1f26c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-24.C
@@ -0,0 +1,4 @@
+// PR c++/28387
+// { dg-do compile { target c++11 } }
+
+enum [[gnu::unused]] E; // { dg-error "without previous declaration" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-25.C
new file mode 100644
index 0000000..09486d6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-25.C
@@ -0,0 +1,12 @@
+// PR c++/28559
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct A
+{
+ struct B;
+};
+
+struct C
+{
+ template<typename T> friend struct [[gnu::packed]] A<T>::B; // { dg-warning "uninstantiated" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-26.C
new file mode 100644
index 0000000..00069b8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-26.C
@@ -0,0 +1,15 @@
+// PR c++/28659
+// The attribute was causing us to get confused in merge_types when
+// combining the template type with an uninstantiated version.
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct [[gnu::aligned(1)]] A
+{
+ A& operator=(const A &t);
+};
+
+template<class T>
+A<T>& A<T>::operator=(const A<T> &t)
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-27.C
new file mode 100644
index 0000000..e38d8d3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-27.C
@@ -0,0 +1,6 @@
+//PR c++/29980
+// { dg-do compile { target c++11 } }
+
+struct A { typedef int X; }; // { dg-message "previous declaration" }
+
+struct [[gnu::unused]] A::X; // { dg-error "typedef-name" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-28.C
new file mode 100644
index 0000000..94f1756
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-28.C
@@ -0,0 +1,13 @@
+// PR c++/28558
+// { dg-options "" }
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(int) { }
+};
+
+int main()
+{
+ A a = (A [[gnu::unused]])0; // { dg-warning "attribute" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-29.C
new file mode 100644
index 0000000..f3da452
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-29.C
@@ -0,0 +1,10 @@
+// PR c++/33506
+// { dg-do compile { target c++11 } }
+
+extern int f1 [[gnu::warn_unused_result]] (char *) ;
+extern int f2 [[gnu::warn_unused_result]] (char *) throw () ;
+extern int f2 (char *) throw ();
+
+extern int f3 [[gnu::nonnull (1)]] (char *) ;
+extern int f4 [[gnu::nonnull (1)]] (char *) throw ();
+extern int f4 (char *) throw ();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-3.C
new file mode 100644
index 0000000..edd1067
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-3.C
@@ -0,0 +1,22 @@
+// Test that attributes work in a variety of situations.
+// { dg-options "-O -ftrack-macro-expansion=0" }
+// { dg-do run { target c++11 } }
+
+#define attrib [[gnu::mode (QI)]]
+#define gnu_attrib __attribute((mode (QI)))
+
+attrib signed int a;
+static unsigned int b attrib;
+
+int foo(attrib int o)
+{
+ return (sizeof (a) != 1
+ || sizeof (b) != 1
+ || sizeof (o) != 1
+ || sizeof ((gnu_attrib signed int) b) != 1);
+}
+
+int main ()
+{
+ return foo (42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-30.C
new file mode 100644
index 0000000..537dec5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-30.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+// PR c++/35074
+
+template<typename T> struct A
+{
+ void foo() const;
+} [[gnu::aligned(4)]]; // { dg-warning "ignored" }
+
+template<typename T> void A<T>::foo() const {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-31.C
new file mode 100644
index 0000000..ab58e6e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-31.C
@@ -0,0 +1,16 @@
+// PR c++/35097
+// { dg-do compile { target c++11 } }
+
+template<int> struct A;
+
+template<> struct A<0>
+{
+ typedef int X [[gnu::aligned(4)]];
+};
+
+template<typename T> void foo(const A<0>::X&, T);
+
+void bar()
+{
+ foo(A<0>::X(), 0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-32.C
new file mode 100644
index 0000000..6a1b235
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-32.C
@@ -0,0 +1,37 @@
+// PR c++/35315
+// { dg-do compile { target c++11 } }
+
+typedef union { int i; } U [[gnu::transparent_union]]; // { dg-warning "ignored" }
+
+static void foo(U) {}
+static void foo(int) {}
+
+void bar()
+{
+ foo(0);
+}
+
+typedef union U1 { int i; } U2 [[gnu::transparent_union]]; // { dg-warning "ignored" }
+
+static void foo2(U1) {} // { dg-message "previously defined" }
+static void foo2(U2) {} // { dg-error "redefinition" }
+
+void bar2(U1 u1, U2 u2)
+{
+ foo2(u1);
+ foo2(u2);
+}
+
+// PR c++/36410
+struct A
+{
+ typedef union [[gnu::transparent_union]]
+ {
+ int i;
+ } B;
+};
+
+void foo(A::B b)
+{
+ b.i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-33.C
new file mode 100644
index 0000000..efb2a1a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-33.C
@@ -0,0 +1,19 @@
+// PR c++/35546
+// { dg-do compile { target c++11 } }
+// { dg-options "-g" }
+
+template <int N>
+struct T
+{
+ void foo [[gnu::format (printf,2,3)]] (char const * ...);
+};
+
+template struct T<3>;
+
+template <typename T>
+struct U
+{
+ typedef T V [[gnu::mode (SI)]];
+};
+
+U<int>::V v;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-34.C
new file mode 100644
index 0000000..ae8e990
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-34.C
@@ -0,0 +1,19 @@
+// PR c/37171
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2 -fdump-tree-optimized" }
+
+unsigned int f1 [[gnu::const]] ();
+unsigned int f2 [[gnu::__const]] () ;
+unsigned int f3 [[gnu::__const__]] () ;
+
+unsigned int f4 ()
+{
+ return f1 () + f1 () + f1 () + f1 ()
+ + f2 () + f2 () + f2 () + f2 ()
+ + f3 () + f3 () + f3 () + f3 ();
+}
+
+// { dg-final { scan-tree-dump-times "= f1 \\(\\)" 1 "optimized" } }
+// { dg-final { scan-tree-dump-times "= f2 \\(\\)" 1 "optimized" } }
+// { dg-final { scan-tree-dump-times "= f3 \\(\\)" 1 "optimized" } }
+// { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-35.C
new file mode 100644
index 0000000..ccae6f0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-35.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-require-effective-target c++11 }
+// { dg-options "-O3 -msse2" }
+// { dg-require-effective-target sse2 }
+
+// You can make NON-template typedefs with a large alignment.
+typedef double AlignedDoubleType [[gnu::aligned(16)]];
+
+template <typename RealType>
+RealType f(const RealType* p)
+{
+ // But if you use a template parameter it complains.
+ typedef RealType AlignedRealType [[gnu::aligned(16)]];
+
+ return p[0];
+}
+
+double f2(const double* p)
+{
+ return f<double>(p);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36-1.C
new file mode 100644
index 0000000..2aae9ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36-1.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+struct S;
+
+typedef int (*F [[gnu::warn_unused_result]]) (int);
+
+typedef int (*F2 [[gnu::warn_unused_result]]) (int);
+
+typedef int (S::*F3 [[gnu::warn_unused_result]]) (int); // { dg-warning "only applies to function types" }
+
+typedef int [[gnu::warn_unused_result]] (*F5) (int); // { dg-warning "ignored" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36.C
new file mode 100644
index 0000000..3f0ef14
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-36.C
@@ -0,0 +1,26 @@
+// PR c++/43031
+// { dg-options "-pedantic" }
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-require-effective-target c++11 }
+
+// c++11 attributes that apply to types are ignored for now
+
+class T;
+class L { };
+class P : public L
+{
+ typedef void (T::* [[gnu::__stdcall__]] F2) (L*); // { dg-warning "ignored" }
+ typedef void (T::*F) (L*) [[gnu::__stdcall__]]; // { dg-warning "ignored" }
+ void f(bool aAdd);
+};
+
+class T
+{
+public:
+ virtual void A(L *listener) [[gnu::__stdcall__]] = 0; // { dg-warning "ignored" }
+ virtual void R(L *listener) [[gnu::__stdcall__]] = 0; // { dg-warning "ignored" }
+};
+void P::f(bool aAdd)
+{
+ F addRemoveEventListener = (aAdd ? &T::A : &T::R);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-37.C
new file mode 100644
index 0000000..59626b2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-37.C
@@ -0,0 +1,18 @@
+// PR c++/43093
+// { dg-options "-pedantic" }
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-require-effective-target c++11 }
+
+// c++11 attributes that apply to types are ignored for now
+
+struct S {
+ int x;
+ S(const S &s) {}
+};
+
+S getS() [[gnu::__stdcall__]]; // { dg-warning "ignored" }
+
+void test()
+{
+ S s = getS();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-38.C
new file mode 100644
index 0000000..3db981a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-38.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+// PR c++/36625
+
+template <int N>
+struct A {
+ struct S { short f[3]; } [[gnu::aligned (N)]]; // { dg-warning "ignored" }
+};
+
+int main ()
+{
+ A<4>::S s;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39-1.C
new file mode 100644
index 0000000..453fc01
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39-1.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+int fragile_block(void) {
+ typedef
+ [[gnu::aligned (16)]] // { dg-warning "ignored" }
+ struct {
+ int i;
+ } XmmUint16;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39.C
new file mode 100644
index 0000000..83fa8b5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-39.C
@@ -0,0 +1,10 @@
+// PR debug/43370
+// { dg-do compile { target c++11 } }
+// { dg-options "-g" }
+
+int fragile_block(void) {
+ typedef struct [[gnu::aligned (16)]] {
+ int i;
+ } XmmUint16;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C
new file mode 100644
index 0000000..eb585a8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C
@@ -0,0 +1,30 @@
+// { dg-options "-Wunused -pedantic-errors" }
+// { dg-do compile { target c++11 } }
+// Test for syntax support of various attribute permutations.
+
+int
+[[noreturn]] // { dg-warning "ignored" }
+one
+[[gnu::unused]]
+(void);
+
+int one_third [[noreturn]] [[gnu::unused]] (void);
+
+int [[gnu::unused]] one_half(); // { dg-warning "ignored" }
+
+static
+[[noreturn]] // { dg-warning "ignored" }
+void two [[gnu::unused]] (void) {}
+
+
+
+[[gnu::unused]]
+int
+five(void)
+[[noreturn]] // { dg-warning "ignored" }
+{}
+
+[[noreturn]]
+void
+six (void)
+;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-40.C
new file mode 100644
index 0000000..f3ccb72
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-40.C
@@ -0,0 +1,5 @@
+// PR c++/46803
+// { dg-do compile { target c++11 } }
+
+int strftime(char *, int, const char *, const struct tm *)
+ [[gnu::__bounded__(__string__,1,2)]]; // { dg-warning "ignored" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-41.C
new file mode 100644
index 0000000..6e47a1e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-41.C
@@ -0,0 +1,20 @@
+// PR c++/45267
+// { dg-do compile { target c++11 } }
+// { dg-options "-O" }
+
+template<typename T> struct Vector {
+ Vector(long long x);
+ inline Vector<T> operator<< [[gnu::always_inline]] (int x) const;
+};
+long long bar (long long);
+template<> inline Vector<int> Vector<int>::operator<<(int x) const {
+ return bar(x);
+}
+bool b;
+int main() {
+ Vector<int> a(1);
+ if ((a << 2), b) {
+ a << 2;
+ throw 1;
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-42.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-42.C
new file mode 100644
index 0000000..ec98ece
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-42.C
@@ -0,0 +1,14 @@
+// { dg-options "-pedantic" }
+// { dg-do compile { target { i?86-*-* && ilp32 } } }
+// { dg-require-effective-target c++11 }
+
+struct A {
+ [[gnu::fastcall]]
+ void f();
+};
+
+int main()
+{
+ typedef void (A::*FP)();
+ FP fp[] = {&A::f}; // { dg-error "cannot convert" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-43.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-43.C
new file mode 100644
index 0000000..c850622
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-43.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+template <class T> struct A { };
+
+template [[gnu::packed]] struct A<int>; // { dg-warning "ignored in explicit instantiation" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-44.C
new file mode 100644
index 0000000..81d70e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-44.C
@@ -0,0 +1,3 @@
+// PR c++/52671
+// { dg-do compile { target c++11 } }
+[[gnu::deprecated]] enum E { E0 }; // { dg-warning "ignored in declaration" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-45.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-45.C
new file mode 100644
index 0000000..573a1ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-45.C
@@ -0,0 +1,4 @@
+// PR c++/52906
+// { dg-do compile { target c++11 } }
+
+[[gnu::deprecated]]; // { dg-error "does not declare anything" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-46.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-46.C
new file mode 100644
index 0000000..53fcb77
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-46.C
@@ -0,0 +1,5 @@
+// PR c++/40821
+// { dg-do compile { target c++11 } }
+
+struct [[gnu::aligned(8)] S1 { int i; }; // { dg-error "" }
+struct [aligned(8) S2 { int i; }; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47-1.C
new file mode 100644
index 0000000..4a5d73a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47-1.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+int
+foo ()
+{
+ int i [[and, bitor, xor_eq, compl, bitand]]; // { dg-warning "ignored" }
+ i = 0;
+ return i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47.C
new file mode 100644
index 0000000..af74abd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-47.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+// Example taken from dcl.attr.grammar:
+
+int p[10];
+void f()
+{
+ int x = 42, y[5];
+ /* Here, the '[[' should have introduced an attribute, on a
+ lambda invocation an array subscripting expression. */
+ int(p[[x] { return x; }()]); // { dg-error "expected|consecutive" }
+ /* Likewise, the '[[gnu::' is invalid here. */
+ y[[] { return 2; }()] = 2; // { dg-error "expected|consecutive" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C
new file mode 100644
index 0000000..3cc5897
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C
@@ -0,0 +1,4 @@
+// Origin: PR c++/54955
+// { dg-do compile { target c++11 } }
+
+alignas(double) int f;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48.C
new file mode 100644
index 0000000..360c093
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+typedef char layout_type;
+
+struct A {
+ layout_type member alignas (double);
+};
+
+static_assert (alignof (A) == alignof (double),
+ "alignment of struct A must be alignof (double)");
+
+struct alignas (alignof (long double)) B {
+ layout_type member;
+};
+
+static_assert (alignof (B) == alignof (long double),
+ "alignment of struct A must be alignof (double double)");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-49.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-49.C
new file mode 100644
index 0000000..8b68f92
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-49.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+typedef char layout_type;
+
+template<class> struct A {
+ layout_type member alignas (double);
+};
+
+static_assert (alignof (A<int>) == alignof (double),
+ "alignment of struct A must be alignof (double)");
+
+template<class> struct alignas (alignof (long double)) B {
+ layout_type member;
+};
+
+static_assert (alignof (B<int>) == alignof (long double),
+ "alignment of struct A must be alignof (double double)");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-5.C
new file mode 100644
index 0000000..83de121
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-5.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+//
+// There were two related problems here, depending on the vintage. At
+// one time:
+//
+// typedef struct A { ... } A [[gnu::aligned (16)]];
+//
+// would cause original_types to go into an infinite loop. At other
+// times, the attributes applied to an explicit typedef would be lost
+// (check_b3 would have a negative size).
+
+// First check that the declaration is accepted and has an effect.
+typedef struct A { int i; } A [[gnu::aligned (16)]];
+int check_A[alignof (A) >= 16 ? 1 : -1];
+
+// Check that the alignment is only applied to the typedef.
+struct B { int i; };
+struct B b1;
+typedef struct B B [[gnu::aligned (16)]];
+struct B b2;
+B b3;
+int check_b1[__alignof__ (b1) == __alignof__ (b2) ? 1 : -1];
+int check_b3[__alignof__ (b3) >= 16 ? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-50.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-50.C
new file mode 100644
index 0000000..2479dfd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-50.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+
+typedef char layout_type;
+
+template<class> struct A {
+ layout_type member alignas (double) alignas (int);
+};
+
+// Here, the spec says that A<int> should have the stricter alignment,
+// so that would be the alignment of 'double', not 'int'.
+static_assert (alignof (A<int>) == alignof (double),
+ "alignment of struct A must be alignof (double)");
+
+template<class> struct alignas (1) alignas (alignof (long double)) B {
+ layout_type member;
+};
+
+// Similarly, the B<int> should have the stricter alignment, so that would
+// so that would be the alignment of 'long double', not '1'.
+static_assert (alignof (B<int>) == alignof (long double),
+ "alignment of struct A must be alignof (double double)");
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-51.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-51.C
new file mode 100644
index 0000000..f2b6602
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-51.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+typedef char layout_type;
+struct A
+{
+ layout_type member [[gnu::aligned (16)]];
+};
+
+static_assert (sizeof (A) == 16, "Alignment should be 16");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C
new file mode 100644
index 0000000..0f87fd4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+
+struct A {int i;} a [[gnu::aligned(16)]];
+struct B {int i;} __attribute__((aligned(16))) b;
+
+int
+main ()
+{
+ A aa;
+ B bb;
+
+ static_assert (sizeof (a) == 4, "sizeof (a) should be 4");
+ static_assert (sizeof (b) == 16, "sizeof (b) should be 16");
+ static_assert (sizeof (aa) == 4, "sizeof (aa) should be 4");
+ static_assert (sizeof (bb) == 16, "sizeof (bb) should be 16");
+
+ static_assert (__alignof__ (a) == 16, "alignof (a) should be 16");
+ static_assert (__alignof__ (b) == 16, "alignof (b) should be 16");
+ static_assert (__alignof__ (aa) == 4, "alignof (aa) should be 4");
+ static_assert (__alignof__ (bb) == 16, "alignof (bb) should be 16");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-53.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-53.C
new file mode 100644
index 0000000..723c8ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-53.C
@@ -0,0 +1,39 @@
+// { dg-do compile { target c++11 } }
+
+int
+toto ()
+{
+ [[gnu::unused]] good:
+ return 0;
+}
+
+int
+foo ()
+{
+ [[gnu::unused]] good:
+ int i = 0;
+
+ // A C++11 attribute at the beginning of the return statement is
+ // syntactically correct, appertains to the return statement (not to
+ // the label) but is currently ignored by this implementation.
+ good_ignored : [[gnu::unused]] // { dg-warning "attributes at the beginning of statement are ignored" }
+ return i;
+}
+
+int
+bar ()
+{
+ // A GNU attribute after the label appertains to the label.
+ good: __attribute__((unused));
+ return 0;
+}
+
+int
+baz ()
+{
+ // The c++ attribute after the label appertains to the (empty)
+ // statement.
+ bad: [[gnu::unused]]; // { dg-warning "attributes at the beginning of statement are ignored" }
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C
new file mode 100644
index 0000000..45aa8e4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C
@@ -0,0 +1,14 @@
+// PR c++/56859
+// { dg-require-effective-target c++11 }
+
+template<unsigned size, unsigned alignment>
+struct aligned_storage
+{
+ using type = struct { alignas(alignment) unsigned char data[size]; };
+};
+
+#define SA(X) static_assert((X),#X)
+SA(alignof(aligned_storage<8,1>::type) == 1);
+SA(alignof(aligned_storage<8,2>::type) == 2);
+SA(alignof(aligned_storage<8,4>::type) == 4);
+SA(alignof(aligned_storage<8,8>::type) == 8);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-55.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-55.C
new file mode 100644
index 0000000..c4e6dea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-55.C
@@ -0,0 +1,12 @@
+// PR c++/58584
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i alignas(this); // { dg-error "17:invalid use of 'this'" }
+};
+
+template<int> struct B
+{
+ int j alignas(this); // { dg-error "17:invalid use of 'this'" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
new file mode 100644
index 0000000..f331ed3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
@@ -0,0 +1,5 @@
+// PR c++/58724
+// { dg-do compile { target c++11 } }
+
+namespace foo __attribute__((visibility("default"))) {}
+namespace bar [[gnu::visibility("default")]] {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C
new file mode 100644
index 0000000..12b4f4c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-57.C
@@ -0,0 +1,9 @@
+// PR c++/59096
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct A
+{
+ typedef T B [[mode]]; // { dg-warning "ignored" }
+};
+
+A<int>::B b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-6.C
new file mode 100644
index 0000000..54071d5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-6.C
@@ -0,0 +1,20 @@
+// Copyright (C) 2002 Free Software Foundation.
+//
+// Test that the nothrow attribute is working correctly.
+//
+// Written by Richard Henderson, 26 May 2002.
+
+// { dg-do link { target c++11} }
+extern void foo [[gnu::nothrow]] ();
+extern void link_error();
+
+int main()
+{
+ try {
+ foo();
+ } catch (...) {
+ link_error();
+ }
+}
+
+void foo() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-7.C
new file mode 100644
index 0000000..3341250
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-7.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-parameter" }
+
+void f (int i [[gnu::__unused__]]) {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-8.C
new file mode 100644
index 0000000..9c834a4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-8.C
@@ -0,0 +1,7 @@
+// { dg-options "-pedantic" }
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-require-effective-target c++11 }
+
+extern int * ([[gnu::stdcall]] *fooPtr)( void); // { dg-error "expected" }
+int * [[gnu::stdcall]] myFn01( void) { return 0; }// { dg-warning "ignored" }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-9.C
new file mode 100644
index 0000000..3dc51ee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gen-attrs-9.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+class C;
+struct S;
+union U;
+enum e {};
+enum [[gnu::unused]] e; // { dg-warning "already defined" }
+
+struct [[gnu::unused]] B *p; // { dg-warning "attributes" }
+
+template <class T> struct A { };
+struct [[gnu::unused]] A<int>; // { dg-warning "attributes" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fext-numeric-literals.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fext-numeric-literals.C
new file mode 100644
index 0000000..6a8398b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fext-numeric-literals.C
@@ -0,0 +1,115 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+// Integer imaginary...
+
+constexpr unsigned long long
+operator"" i(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 0; }
+
+constexpr unsigned long long
+operator"" I(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 1; }
+
+constexpr unsigned long long
+operator"" j(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 2; }
+
+constexpr unsigned long long
+operator"" J(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 3; }
+
+// Floating-point imaginary...
+
+constexpr long double
+operator"" i(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 0.0L; }
+
+constexpr long double
+operator"" I(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 1.0L; }
+
+constexpr long double
+operator"" j(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 2.0L; }
+
+constexpr long double
+operator"" J(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 3.0L; }
+
+// Fixed-point...
+
+constexpr long double
+operator"" k(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 0; }
+
+constexpr long double
+operator"" K(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 1; }
+
+constexpr long double
+operator"" r(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 2; }
+
+constexpr long double
+operator"" R(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 3; }
+
+// Machine-defined...
+
+constexpr long double
+operator"" w(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 0; }
+
+constexpr long double
+operator"" W(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 1; }
+
+constexpr long double
+operator"" q(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 2; }
+
+constexpr long double
+operator"" Q(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 3; }
+
+int
+main()
+{
+ auto ii = 1i;
+ auto Ii = 1I;
+ auto ji = 1j;
+ auto Ji = 1J;
+
+ auto ifp = 1.0i;
+ auto Ifp = 1.0I;
+ auto jfp = 1.0j;
+ auto Jfp = 1.0J;
+
+ auto kfp = 1.0k; // { dg-error "fixed-point types not supported" }
+ auto Kfp = 1.0K; // { dg-error "fixed-point types not supported" }
+ auto rfp = 1.0r; // { dg-error "fixed-point types not supported" }
+ auto Rfp = 1.0R; // { dg-error "fixed-point types not supported" }
+
+ auto wfp = 1.0w; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+ auto Wfp = 1.0W; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+ auto qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
+ auto Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
+}
+
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 7 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 11 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 15 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 19 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 25 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 29 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 33 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 37 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 43 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 47 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 51 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 55 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 61 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 65 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 69 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 73 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fno-ext-numeric-literals.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fno-ext-numeric-literals.C
new file mode 100644
index 0000000..c738a48
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/gnu_fno-ext-numeric-literals.C
@@ -0,0 +1,115 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-ext-numeric-literals" }
+
+// Integer imaginary...
+
+constexpr unsigned long long
+operator"" i(unsigned long long n)
+{ return 4 * n + 0; }
+
+constexpr unsigned long long
+operator"" I(unsigned long long n)
+{ return 4 * n + 1; }
+
+constexpr unsigned long long
+operator"" j(unsigned long long n)
+{ return 4 * n + 2; }
+
+constexpr unsigned long long
+operator"" J(unsigned long long n)
+{ return 4 * n + 3; }
+
+// Floating-point imaginary...
+
+constexpr long double
+operator"" i(long double n)
+{ return 4.0L * n + 0.0L; }
+
+constexpr long double
+operator"" I(long double n)
+{ return 4.0L * n + 1.0L; }
+
+constexpr long double
+operator"" j(long double n)
+{ return 4.0L * n + 2.0L; }
+
+constexpr long double
+operator"" J(long double n)
+{ return 4.0L * n + 3.0L; }
+
+// Fixed-point...
+
+constexpr long double
+operator"" k(long double n)
+{ return 4 * (n + 1) + 0; }
+
+constexpr long double
+operator"" K(long double n)
+{ return 4 * (n + 1) + 1; }
+
+constexpr long double
+operator"" r(long double n)
+{ return 4 * (n + 1) + 2; }
+
+constexpr long double
+operator"" R(long double n)
+{ return 4 * (n + 1) + 3; }
+
+// Machine-defined...
+
+constexpr long double
+operator"" w(long double n)
+{ return 4 * (n + 2) + 0; }
+
+constexpr long double
+operator"" W(long double n)
+{ return 4 * (n + 2) + 1; }
+
+constexpr long double
+operator"" q(long double n)
+{ return 4 * (n + 2) + 2; }
+
+constexpr long double
+operator"" Q(long double n)
+{ return 4 * (n + 2) + 3; }
+
+int
+main()
+{
+ auto ii = 1i;
+ auto Ii = 1I;
+ auto ji = 1j;
+ auto Ji = 1J;
+
+ auto ifp = 1.0i;
+ auto Ifp = 1.0I;
+ auto jfp = 1.0j;
+ auto Jfp = 1.0J;
+
+ auto kfp = 1.0k;
+ auto Kfp = 1.0K;
+ auto rfp = 1.0r;
+ auto Rfp = 1.0R;
+
+ auto wfp = 1.0w;
+ auto Wfp = 1.0W;
+ auto qfp = 1.0q;
+ auto Qfp = 1.0Q;
+}
+
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 7 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 11 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 15 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 19 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 25 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 29 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 33 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 37 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 43 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 47 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 51 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 55 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 61 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 65 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 69 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 73 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
new file mode 100644
index 0000000..d4cd2e8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+struct S
+{
+ S();
+private:
+ S(S const &&);
+ S & operator=(S const &&);
+};
+
+void f()
+{
+ S a;
+ S b(a); // { dg-error "deleted" }
+ a = b; // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-trivial1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-trivial1.C
new file mode 100644
index 0000000..23921c7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit-trivial1.C
@@ -0,0 +1,23 @@
+// PR c++/46807
+// { dg-do compile { target c++11 } }
+// In C++98/03, B::B(const B&) is trivial because A::A(const A&) is trivial,
+// even though doing overload resolution would mean calling the template
+// constructor. In C++11, we do overload resolution to determine triviality.
+
+struct A
+{
+ A() {}
+private:
+ template <class T> A(T&); // { dg-error "private" }
+};
+
+struct B // { dg-error "implicitly deleted|this context" }
+{
+ mutable A a;
+};
+
+int main()
+{
+ B b;
+ B b2(b); // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit1.C
new file mode 100644
index 0000000..7eb3371
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit1.C
@@ -0,0 +1,26 @@
+// Test for implicitly deleted destructors.
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "default definition would be ill-formed" }
+// { dg-prune-output "within this context" }
+
+class C
+{
+ void operator delete (void *); // { dg-error "private" }
+public:
+ virtual ~C(); // { dg-error "overriding" }
+};
+
+struct D: C { }; // { dg-error "deleted" }
+D d; // { dg-error "deleted" }
+
+struct E
+{
+ ~E() = delete; // { dg-message "declared here" }
+};
+
+struct F
+{
+ virtual ~F(); // { dg-error "overriding" }
+};
+
+struct G: E, F { }; // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit10.C
new file mode 100644
index 0000000..6a0c711
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit10.C
@@ -0,0 +1,19 @@
+// PR c++/46103
+// { dg-do compile { target c++11 } }
+
+struct MoveOnly {
+ MoveOnly(const MoveOnly&) = delete;
+ MoveOnly(MoveOnly&&) { }
+ MoveOnly() = default;
+};
+
+struct A {
+ MoveOnly mo[1];
+ A() = default;
+ A(A&&) = default;
+};
+
+int main() {
+ A a;
+ A aa = static_cast<A&&>(a);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit11.C
new file mode 100644
index 0000000..3471ad9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit11.C
@@ -0,0 +1,17 @@
+// Test that we consider base dtors in determining whether
+// a derived ctor is deleted even if the ctor is trivial.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ ~A() = delete; // { dg-message "declared here" }
+};
+
+struct B: A { }; // { dg-error "deleted" }
+
+extern B eb;
+int main()
+{
+ B* b1 = new B; // { dg-error "use of deleted function" }
+ B* b2 = new B(eb); // { dg-error "use of deleted function" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit12.C
new file mode 100644
index 0000000..d52f153
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit12.C
@@ -0,0 +1,54 @@
+// PR c++/50500
+// { dg-do compile { target c++11 } }
+
+// If a class declares move operations, the implicitly declared copy
+// operations are deleted.
+struct A
+{
+ A();
+ A(A&&);
+ A& operator=(A&&);
+};
+
+// But they can still be explicitly defaulted.
+struct B
+{
+ B();
+ B(B&&);
+ B(const B&) = default;
+ B& operator=(B&&);
+ B& operator=(const B&) = default;
+};
+
+struct C
+{
+ C();
+ C(C&&);
+};
+
+struct D
+{
+ D();
+ D& operator=(D&&);
+};
+
+int main()
+{
+ A a;
+ A a2 (a); // { dg-error "deleted" }
+ a2 = a; // { dg-error "deleted" }
+
+ B b;
+ B b2 (b);
+ b2 = b;
+
+ C c;
+ C c2(c); // { dg-error "deleted" }
+ c2 = c; // { dg-error "deleted" }
+
+ D d;
+ D d2(d); // { dg-error "deleted" }
+ d2 = d; // { dg-error "deleted" }
+}
+
+// { dg-prune-output "because" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C
new file mode 100644
index 0000000..3165863
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit13.C
@@ -0,0 +1,32 @@
+// Make sure that A's destructor doesn't affect constexpr
+// or exception-spec on D's default constructor.
+// { dg-do compile { target c++11 } }
+
+struct A {
+ constexpr A() noexcept: i(0) { }
+ int i;
+ ~A() noexcept(false);
+};
+
+struct B: A { };
+
+// Should get static initialization, so no constructor call.
+// { dg-final { scan-assembler-not "_ZN1BC1Ev" } }
+B b;
+
+struct C { C() noexcept; ~C() noexcept(false); };
+struct D: C { };
+extern D d;
+
+void *operator new(__SIZE_TYPE__, void*) noexcept;
+
+#define SA(X) static_assert((X),#X)
+SA(noexcept(new (&d) D));
+
+struct E: virtual C { };
+extern E e;
+SA(noexcept (new (&e) E));
+
+struct F { C c; };
+extern F f;
+SA(noexcept (new (&f) F));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit14.C
new file mode 100644
index 0000000..8a56244
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit14.C
@@ -0,0 +1,26 @@
+// PR c++/54506
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A
+{
+ A() {}
+
+ A(A const volatile &&) = delete;
+ A &operator =(A const volatile &&) = delete;
+
+ template <class U> A(A<U> &&) {}
+ template <class U> A &operator =(A<U> &&) { return *this; }
+};
+
+struct B
+{
+ A<int> a;
+ B() = default;
+};
+
+int main()
+{
+ B b = B();
+ b = B();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit2.C
new file mode 100644
index 0000000..2995894
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit2.C
@@ -0,0 +1,32 @@
+// Test that the synthesized C copy constructor calls the A template
+// constructor and has the appropriate exception specification.
+// { dg-do run { target c++11 } }
+
+int r = 1;
+
+struct A
+{
+ A() {}
+ A(const A&) throw () { }
+ template <class T>
+ A(T& t) { r = 0; }
+};
+
+struct B
+{
+ B() {}
+ B(B&) throw () { }
+};
+
+struct C: A, B { };
+
+#define SA(E) static_assert(E, #E)
+
+C c;
+SA (!noexcept(C(c)));
+
+int main()
+{
+ (C(c));
+ return r;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit3.C
new file mode 100644
index 0000000..8176a6e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit3.C
@@ -0,0 +1,55 @@
+// Basic runtime test for implicit move constructor
+// { dg-do run { target c++11 } }
+
+int m;
+
+struct A
+{
+ A() = default;
+ A(A&&) { ++m; }
+ A& operator=(A&&) { ++m; return *this; }
+};
+
+struct B
+{
+ B() = default;
+ B(const B&);
+ B(B&&) { ++m; }
+ B& operator=(const B&);
+ B& operator=(B&&) { ++m; return *this; }
+};
+
+struct C
+{
+ C() = default;
+ C(C&);
+ C(C&&) { ++m; }
+ C& operator=(C&);
+ C& operator=(C&&) { ++m; return *this; }
+};
+
+struct D: public A, public B
+{
+ C c;
+ int i;
+};
+
+struct E: public A, public B
+{
+ C c;
+ int i;
+ E() = default;
+ E(E&&) = default;
+ E& operator=(E&&) = default;
+};
+
+int main()
+{
+ D d1;
+ D d2 (static_cast<D&&>(d1));
+ d1 = static_cast<D&&>(d2);
+ E e1;
+ E e2 (static_cast<E&&>(e1));
+ e1 = static_cast<E&&>(e2);
+ return m != 12;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit4.C
new file mode 100644
index 0000000..eeb4aa9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit4.C
@@ -0,0 +1,20 @@
+// Test that a base with only a move constructor causes the implicit copy
+// constructor to be deleted.
+// { dg-do compile { target c++11 } }
+
+struct A // { dg-message "declares a move" }
+{
+ A();
+ A(A&&);
+};
+
+struct B: A // { dg-error "use of deleted" }
+{
+};
+
+int main()
+{
+ B b1;
+ B b2(b1); // { dg-error "deleted function .B::B.const" }
+ B b3(static_cast<B&&>(b1));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit5.C
new file mode 100644
index 0000000..f9ae535
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit5.C
@@ -0,0 +1,19 @@
+// Test that the default B copy constructor calls the deleted A
+// copy constructor.
+// { dg-do compile { target c++11 } }
+
+struct A // { dg-message "declares a move" }
+{
+ A() = default;
+ A(A&&) = default;
+ template <class T>
+ A(const T& t) { t.i; }
+};
+
+struct B: A { }; // { dg-error "implicitly|use of deleted" }
+
+int main()
+{
+ B b;
+ B b2(b); // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit6.C
new file mode 100644
index 0000000..d3e85d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit6.C
@@ -0,0 +1,23 @@
+// Circular implicit declarations were causing errors
+// { dg-do compile { target c++11 } }
+
+struct Ray;
+
+struct Vector
+{
+ virtual void f(); // make non-trivially-copyable
+ Vector(const Ray &) ;
+};
+
+struct array
+{
+ Vector v;
+};
+
+struct Ray
+{
+ array a;
+};
+
+extern Ray r1;
+Ray r2=r1;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit7.C
new file mode 100644
index 0000000..eaa7d82
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit7.C
@@ -0,0 +1,37 @@
+// PR c++/44909
+// { dg-do compile { target c++11 } }
+// Declaring A<D<E>>'s copy ctor means choosing a ctor to initialize D<E>,
+// which means choosing a ctor for C<B<E>>, which meant considering
+// C(const B<E>&) which means choosing a ctor for B<E>, which means choosing
+// a ctor for A<D<E>>. Cycle.
+
+template<typename T>
+struct A
+{
+ T t;
+};
+
+template <typename T>
+struct B
+{
+ typename T::U u;
+};
+
+template <typename T>
+struct C
+{
+ C(const T&);
+};
+
+template <typename T>
+struct D
+{
+ C<B<T> > v;
+};
+
+struct E {
+ typedef A<D<E> > U;
+};
+
+extern A<D<E> > a;
+A<D<E> > a2(a);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit8.C
new file mode 100644
index 0000000..68575ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit8.C
@@ -0,0 +1,32 @@
+// The hack for PR c++/44909 breaks this testcase. We need feedback
+// from the C++ committee to know how to proceed.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+ A(A&);
+};
+
+struct B;
+struct BP
+{
+ BP(const B&);
+};
+
+struct B
+{
+ B();
+ B(B&&);
+ B(const BP&);
+};
+
+// If B(B&&) suppresses the B copy constructor, then copying the B
+// subobject of C should use B(const BP&). But we ignore that constructor
+// in order to break the cycle in 44909. Perhaps the move ctor shouldn't
+// suppress the copy ctor?
+// As of DR 1082, it doesn't suppress it.
+struct C: A, B { }; // { dg-error "use of deleted" }
+
+C c;
+C c2(c); // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit9.C
new file mode 100644
index 0000000..0952a42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/implicit9.C
@@ -0,0 +1,12 @@
+// Test that private base dtor makes derived ctor deleted
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+private:
+ ~A(); // { dg-error "private" }
+};
+
+struct B: A { }; // { dg-error "implicitly deleted|context" }
+B * b = new B; // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor1.C
new file mode 100644
index 0000000..c656fb9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor1.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ constexpr A(int i): i(i) {}
+};
+
+struct B: A
+{
+ using A::A;
+};
+
+constexpr B b(42);
+
+#define SA(X) static_assert((X),#X)
+SA(b.i == 42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor10.C
new file mode 100644
index 0000000..48e95a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor10.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-g" }
+
+struct A
+{
+ template <class... Ts> A(Ts...);
+};
+
+struct B: A
+{
+ using A::A;
+};
+
+B b1(42);
+B b2(1.0, 42, (void*)0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C
new file mode 100644
index 0000000..228e8ec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A(int, ...); // { dg-message "declared here" }
+};
+
+struct B: A
+{
+ using A::A; // { dg-warning "ellipsis" }
+};
+
+B b1(42);
+B b2(42, 1.0); // { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor12.C
new file mode 100644
index 0000000..cc23d4b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor12.C
@@ -0,0 +1,25 @@
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i;
+ template <class T>
+ A(T t) noexcept : i(t) {}
+};
+
+struct C
+{
+ C() { throw 42; }
+};
+
+struct B: A, C
+{
+ using A::A;
+};
+
+int main()
+{
+ try { B b(24); }
+ catch (int) { return 0; }
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C
new file mode 100644
index 0000000..bd021e6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor13.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ template <class T> A(T t);
+};
+
+struct C
+{
+ C() = delete; // { dg-message "declared here" }
+};
+
+struct B: A, C
+{
+ using A::A; // { dg-error "C::C" }
+};
+
+int main()
+{
+ B b(24); // { dg-error "B::B" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C
new file mode 100644
index 0000000..0404880
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor14.C
@@ -0,0 +1,10 @@
+// PR c++/55261
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+};
+struct B : A
+{
+ using A::A;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor15.C
new file mode 100644
index 0000000..c2d33bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor15.C
@@ -0,0 +1,15 @@
+// Discussions on the core reflector indicate that not inheriting base copy
+// constructors was a deliberate choice.
+
+// { dg-do compile { target c++11 } }
+
+struct A { A(int); };
+struct B: public A
+{
+ using A::A;
+};
+
+A a (42);
+
+B b1 (24); // inherited
+B b2 (a); // not inherited { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor16.C
new file mode 100644
index 0000000..ba6849f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor16.C
@@ -0,0 +1,15 @@
+// PR c++/56285
+// { dg-do compile { target c++11 } }
+
+struct foo {
+ explicit foo(int&&) {}
+};
+
+struct bar: private foo {
+ using foo::foo;
+};
+
+int main()
+{
+ bar b { 42 };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor17.C
new file mode 100644
index 0000000..22eda3a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor17.C
@@ -0,0 +1,45 @@
+// PR c++/56323
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A(int i);
+};
+
+typedef A B;
+
+struct C : B {
+ using B::B;
+};
+
+struct D : B {
+ using B::A;
+};
+
+C c(0);
+D d(0);
+
+template <class T>
+struct E {
+ typedef T type;
+};
+
+template <class T>
+struct F : E<T>::type {
+ using E<T>::type::type; // error: E<T>::type is a typedef
+};
+
+F<A> f(0);
+
+template <class T>
+struct AT
+{
+ AT(T);
+};
+
+template <template <class> class T>
+struct G : T<int>
+{
+ using T<int>::T;
+};
+
+G<AT> g(0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C
new file mode 100644
index 0000000..0573555
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor18.C
@@ -0,0 +1,22 @@
+// PR c++/56358
+// { dg-do compile { target c++11 } }
+
+struct foo {
+ explicit foo(int) {}
+};
+
+template<typename T>
+struct bar: T {
+ using T::T;
+
+ // Bad
+ explicit bar(): T(0) {}
+
+ void baz()
+ {
+ // Also bad
+ using qux = T;
+ }
+};
+
+bar<foo> b, b2(42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C
new file mode 100644
index 0000000..7a22f88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C
@@ -0,0 +1,14 @@
+// PR c++/60389
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template<typename...T> A(T...) {}
+};
+
+struct B : A
+{
+ using A::A; // { dg-error "inherited" }
+};
+
+constexpr B b; // { dg-error "literal" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C
new file mode 100644
index 0000000..15e5657
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor2.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ constexpr A(int, int i = num): i(i) {}
+private:
+ static const int num = 42;
+};
+
+struct B: A
+{
+ using A::A;
+};
+
+constexpr B b(24);
+
+#define SA(X) static_assert((X),#X)
+SA(b.i == 42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C
new file mode 100644
index 0000000..e8dc84d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor3.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+struct B1 {
+ B1(int);
+};
+struct B2 {
+ B2(int);
+};
+struct D1 : B1, B2 {
+ using B1::B1; // { dg-error "inherited" }
+ using B2::B2; // { dg-error "inherited" }
+}; // ill-formed: attempts to declare D1(int) twice
+struct D2 : B1, B2 {
+ using B1::B1;
+ using B2::B2;
+ D2(int); // OK: user declaration supersedes both implicit declarations
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor4.C
new file mode 100644
index 0000000..16dc197
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor4.C
@@ -0,0 +1,18 @@
+// From N3337
+// { dg-do compile { target c++11 } }
+
+struct B1 {
+ B1(int);
+};
+struct B2 {
+ B2(int = 13, int = 42);
+};
+struct D1 : B1 {
+ using B1::B1;
+};
+struct D2 : B2 {
+ using B2::B2;
+};
+
+D1 d1(1);
+D2 d2a(2), d2b(3,4);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C
new file mode 100644
index 0000000..8c79c83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor5.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+
+struct B1 {
+ B1(int) { }
+};
+struct B2 {
+ B2(double) { }
+};
+struct D1 : B1 { // { dg-error "no match" }
+ using B1::B1; // implicitly declares D1(int)
+ int x;
+};
+void test() {
+ D1 d(6); // OK: d.x is not initialized
+ D1 e; // { dg-error "deleted" } D1 has no default constructor
+}
+struct D2 : B2 {
+ using B2::B2; // { dg-error "no match" } implicitly declares D2(double)
+ B1 b;
+};
+D2 f(1.0); // { dg-error "deleted" } B1 has no default constructor
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor6.C
new file mode 100644
index 0000000..98ac188
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor6.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+extern "C" int printf (const char *, ...);
+template< class T >
+struct D : T {
+ using T::T;
+ // declares all constructors from class T
+ ~D() { printf ("Destroying wrapper\n"); }
+};
+
+struct A {
+ A(int);
+};
+
+D<A> d(42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor7.C
new file mode 100644
index 0000000..280ccfe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor7.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ template <class T>
+ constexpr A(T t): i(t) {}
+};
+
+struct B: A
+{
+ using A::A;
+};
+
+constexpr B b(42);
+
+#define SA(X) static_assert((X),#X)
+SA(b.i == 42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor8.C
new file mode 100644
index 0000000..74c9496
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor8.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ explicit A(int i): i(i) {}
+};
+
+struct B: A
+{
+ using A::A;
+};
+
+void f(B);
+
+int main()
+{
+ f(B(42)); // OK
+ f(42); // { dg-error "could not convert" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor9.C
new file mode 100644
index 0000000..3975101
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inh-ctor9.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+class A
+{
+ int i;
+protected:
+ A(int i): i(i) {}
+};
+
+struct B: A
+{
+ using A::A; // { dg-error "protected" }
+};
+
+B b(42); // { dg-error "this context" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C
new file mode 100644
index 0000000..1e25eb2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+typedef int IA[2];
+typedef double DA[2];
+
+void f(const IA&) { }
+void f(const DA&);
+
+int main()
+{
+ f({1,2});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
new file mode 100644
index 0000000..1a94f4e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
@@ -0,0 +1,10 @@
+// PR c++/52743
+// { dg-do compile { target c++11 } }
+
+void composite (int const (&) [2]);
+void composite (int const (&) [3]);
+
+int main ()
+{
+ composite({0,1}); // { dg-error "ambiguous" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C
new file mode 100644
index 0000000..925ab16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+typedef int IRT[2];
+
+const IRT& ir = IRT{1,2};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C
new file mode 100644
index 0000000..bc6d272
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C
@@ -0,0 +1,13 @@
+// PR c++/52905
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+enum E { e1, e2 };
+struct A
+{
+ A(std::initializer_list<E>); // { dg-message "A::A" }
+ A(int, E); // { dg-message "A::A" }
+};
+
+A a{e1,2}; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C
new file mode 100644
index 0000000..6ae32a6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C
@@ -0,0 +1,28 @@
+// Test for deduction of T as std::initializer_list. This isn't currently
+// supported by the working draft, but is necessary for perfect forwarding
+// of initializer-lists to things that can take a std::initializer_list.
+
+// { dg-options "-fdeduce-init-list" }
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ A(std::initializer_list<int>) { }
+};
+
+void f (A a) { }
+
+template <class T>
+auto g (T&& t) -> decltype (f(t)) // { dg-warning "call" }
+{
+ return f(t);
+}
+
+int main()
+{
+ g({1}); // { dg-warning "deduc" }
+}
+
+// { dg-prune-output "-fno-deduce-init-list" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C
new file mode 100644
index 0000000..45eb2d5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C
@@ -0,0 +1,36 @@
+// PR c++/56614
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+namespace std
+{
+ template<typename T>
+ struct allocator
+ { };
+
+ template<typename T, typename Alloc = std::allocator<T> >
+ struct vector
+ {
+ vector(std::initializer_list<T>, const Alloc& = Alloc()) { }
+ };
+}
+
+void func() { }
+
+enum E { ee };
+
+struct C
+{
+ template<typename T>
+ C(T, std::vector<E> = std::vector<E>({ ee }))
+ { }
+};
+
+struct G
+{
+ void gen()
+ {
+ C c(&func);
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-explicit-sfinae.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-explicit-sfinae.C
new file mode 100644
index 0000000..78ec8cb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-explicit-sfinae.C
@@ -0,0 +1,46 @@
+// { dg-do compile { target c++11 } }
+template<typename _Tp>
+_Tp&& declval() noexcept;
+
+template<bool b>
+struct bt {
+ static constexpr bool value = b;
+};
+
+template <typename To_, typename... From_>
+class my_is_convertible_many {
+ private:
+ template <typename To>
+ struct indirector {
+ indirector(To);
+ };
+
+ template <typename To, typename... From>
+ struct tag {};
+
+ template <typename To, typename... From>
+ static auto test(tag<To, From...>)
+ -> decltype(indirector<To>({declval<From>()...}), bt<true>());
+ static auto test(...)
+ -> bt<false>;
+
+ public:
+ static constexpr bool value = decltype(test(tag<To_, From_...>()))::value;
+};
+
+struct A {};
+struct B {};
+struct C {};
+
+struct Test {
+ Test(A, A);
+ //Test(B, B);
+ explicit Test(C, C);
+};
+
+int main() {
+ static_assert(my_is_convertible_many<Test, A, A>::value,""); // true, correct
+ static_assert(!my_is_convertible_many<Test, B, B>::value,""); // false, correct
+ static_assert(!my_is_convertible_many<Test, C, C>::value,""); // error
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C
new file mode 100644
index 0000000..d3b0fc3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C
@@ -0,0 +1,33 @@
+// Test that we properly extend the lifetime of the initializer_list
+// array even if the initializer_list is a subobject.
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+extern "C" void abort();
+bool ok;
+
+bool do_throw;
+
+struct A {
+ A(int) { if (do_throw) throw 42; }
+ ~A() { if (!ok) abort(); }
+};
+
+typedef std::initializer_list<A> AL;
+typedef std::initializer_list<AL> AL2;
+typedef std::initializer_list<AL2> AL3;
+
+struct B {
+ AL al;
+ const AL& alr;
+};
+
+int main(int argc, const char** argv)
+{
+ do_throw = (argc > 1); // always false, but optimizer can't tell
+ AL ar[] = {{1,2},{3,4}};
+ B b = {{5,6},{7,8}};
+ AL3 al3 = {{{1},{2},{3}}};
+ ok = true;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C
new file mode 100644
index 0000000..77fc961
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C
@@ -0,0 +1,63 @@
+// Test that we properly extend the lifetime of the initializer_list
+// array even if the initializer_list is a subobject.
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+extern "C" void abort();
+bool ok;
+
+bool do_throw;
+
+struct A {
+ A(int) { if (do_throw) throw 42; }
+ ~A() { if (!ok) abort(); }
+};
+
+typedef std::initializer_list<A> AL;
+typedef std::initializer_list<AL> AL2;
+typedef std::initializer_list<AL2> AL3;
+
+struct B {
+ AL al;
+ const AL& alr;
+};
+
+struct A2
+{
+ const A& a1;
+ const A& a2;
+};
+
+struct C {
+ AL ar[2];
+ B b;
+ AL3 al3;
+ A2 a2;
+ A2 a2r[2];
+ C():
+ ar{{1,2},{3,4}},
+ b{{5,6},{7,8}},
+ al3{{{1},{2},{3}}},
+ a2{1,2},
+ a2r{{1,2},{3,4}}
+ { ok = true; }
+};
+
+struct D {
+ AL ar[2] = {{1,2},{3,4}};
+ B b = {{5,6},{7,8}};
+ AL3 al3 = {{{1},{2},{3}}};
+ A2 a2 = {1,2};
+ A2 a2r[2] = {{1,2},{3,4}};
+ D() { ok = true; }
+};
+
+int main(int argc, const char** argv)
+{
+ do_throw = (argc > 1); // always false, but optimizer can't tell
+ ok = false;
+ C c;
+ ok = false;
+ D d;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-opt.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-opt.C
new file mode 100644
index 0000000..3a5e908
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-opt.C
@@ -0,0 +1,20 @@
+// PR c++/41997
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2 -fdump-tree-optimized" }
+// { dg-final { scan-tree-dump-not "_0" "optimized" } }
+// { dg-final { cleanup-tree-dump "optimized" } }
+
+#include <initializer_list>
+
+inline int max_val(std::initializer_list<int> il)
+{
+ int i = *(il.begin());
+ int j = *(il.begin() + 1);
+ return (i > j ? i : j);
+}
+
+int main(void)
+{
+ return max_val({1,2});
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C
new file mode 100644
index 0000000..b43ffc3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C
@@ -0,0 +1,18 @@
+// PR c++/51738
+// { dg-do compile { target c++11 } }
+
+struct Index
+{
+ Index(unsigned, unsigned){ }
+};
+
+struct Matrix
+{
+ void operator[](Index){ }
+};
+
+int main()
+{
+ Matrix m;
+ m[{0,1}];
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C
new file mode 100644
index 0000000..5d12163
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C
@@ -0,0 +1,23 @@
+// PR c++/54325
+// { dg-do compile { target c++11 } }
+
+class base
+{
+ protected:
+ base()
+ {}
+};
+
+class derived : public base
+{
+ public:
+ derived()
+ : base{} // <-- Note the c++11 curly brace syntax
+ {}
+};
+
+int main()
+{
+ derived d1;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-pure.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-pure.C
new file mode 100644
index 0000000..a9dbc90
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-pure.C
@@ -0,0 +1,25 @@
+// PR c++/54325
+// { dg-do compile { target c++11 } }
+
+class Base {
+public:
+ Base() {};
+ virtual ~Base() {};
+
+ virtual void do_stuff() = 0;
+};
+
+class Derived: public Base {
+public:
+ Derived() : Base{} {};
+ virtual ~Derived() {};
+
+ virtual void do_stuff() {};
+};
+
+int
+main() {
+ Derived d;
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value.C
new file mode 100644
index 0000000..ac84266
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value.C
@@ -0,0 +1,34 @@
+// Test for value-initialization via {}
+// { dg-do run { target c++11 } }
+
+void * operator new (__SIZE_TYPE__, void *p) { return p; }
+void * operator new[] (__SIZE_TYPE__, void *p) { return p; }
+
+// Empty base so A isn't an aggregate
+struct B {};
+struct A: B {
+ int i;
+};
+
+struct C: A {
+ C(): A{} {}
+};
+
+int f(A a) { return a.i; }
+
+int main()
+{
+ A a{};
+ C c;
+ int space = 42;
+ A* ap = new (&space) A{};
+ int space1[1] = { 42 };
+ A* a1p = new (space1) A[1]{};
+ if (a.i != 0
+ || c.i != 0
+ || ap->i != 0
+ || a1p[0].i != 0
+ || A{}.i != 0
+ || f({}) != 0)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value2.C
new file mode 100644
index 0000000..1b4cde7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist-value2.C
@@ -0,0 +1,19 @@
+// Test that we properly value-initialize a class with a user-provided
+// constructor but defaulted default constructor. The FDIS got this
+// wrong; see c++std-core-19883.
+
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i;
+ A() = default;
+ A(int);
+};
+
+int main()
+{
+ A a{};
+ if (a.i != 0)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist1.C
new file mode 100644
index 0000000..fb8e85b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist1.C
@@ -0,0 +1,71 @@
+// Basic uses of initializer lists
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+extern "C" void abort();
+
+using namespace std;
+
+struct A { int i,j; A(int _i,int _j): i(_i), j(_j) {} };
+struct B { A a; B(A _a): a(_a) {} };
+struct C { B b; C(B _b): b(_b) {} };
+
+struct D
+{
+ int ia[3];
+ D (initializer_list<int> l)
+ {
+ const int *p = l.begin();
+ for (int i = 0; i < 3; ++i)
+ ia[i] = *p++;
+ }
+};
+
+void f(C c)
+{
+ if (c.b.a.i != 1) abort();
+ if (c.b.a.j != 2) abort();
+}
+void f(int);
+
+void g(D d)
+{
+ if (d.ia[0] != 1 || d.ia[1] != 2 || d.ia[2] != 3)
+ abort();
+}
+
+struct E
+{
+ int i, j, k;
+};
+
+void h(E e)
+{
+ if (e.i != 1 || e.j != 2 || e.k != 3)
+ abort();
+}
+
+void i(initializer_list<int> l)
+{
+ const int *p = l.begin();
+ if (*p++ != 1) abort();
+ if (*p++ != 2) abort();
+ if (*p++ != 3) abort();
+ if (p != l.end()) abort();
+}
+
+struct U { U(int, int) {} };
+U ua[] = { { 3, 2 } };
+
+int main()
+{
+ g({1,2,3});
+
+ h({1,2,3});
+
+ f({{{1,2}}});
+ f({{A{1,2}}});
+
+ i({1,2,3});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist10.C
new file mode 100644
index 0000000..80a8837
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist10.C
@@ -0,0 +1,53 @@
+// PR c++/38380
+// { dg-do compile { target c++11 } }
+
+namespace std
+{
+ struct atomic_bool
+ {
+ bool _M_i;
+
+ atomic_bool() = default;
+ ~atomic_bool() = default;
+ atomic_bool(const atomic_bool&) = delete;
+ atomic_bool& operator=(const atomic_bool&) = delete;
+
+ explicit atomic_bool(bool __i) { _M_i = __i; }
+
+ operator bool() const volatile
+ { return true; }
+ };
+}
+
+namespace __gnu_test
+{
+ struct direct_list_initializable
+ {
+ template<typename _Ttype, typename _Tvalue>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ _Ttype __v1 = { }; // default ctor
+ _Ttype __v2 { __a }; // single-argument ctor
+ }
+
+ _Tvalue __a;
+ };
+
+ void (_Concept::*__x)() __attribute__((unused))
+ = &_Concept::__constraint;
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::direct_list_initializable test;
+
+ test.operator()<std::atomic_bool, bool>();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist11.C
new file mode 100644
index 0000000..024466e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist11.C
@@ -0,0 +1,18 @@
+// PR c++/38684
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct Y {};
+
+struct X : Y {
+ X(std::initializer_list<int>) {}
+};
+
+struct A {
+ X v;
+};
+
+int main() {
+ A a{ {1,2,3} };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist12.C
new file mode 100644
index 0000000..5efdc67
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist12.C
@@ -0,0 +1,21 @@
+// PR c++/38698
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+
+struct A
+{
+ int i;
+};
+
+A a({1,2}); // { dg-error "no match" }
+
+union U
+{
+ int i,j;
+};
+
+U u({1,2}); // { dg-error "no match" }
+
+union V {};
+
+V v({1}); // { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist13.C
new file mode 100644
index 0000000..bba2267
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist13.C
@@ -0,0 +1,7 @@
+// PR c++/39056
+// { dg-do compile { target c++11 } }
+
+#include <complex>
+
+__complex__ int i {0};
+std::complex<int> i2 {0};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist14.C
new file mode 100644
index 0000000..41331c4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist14.C
@@ -0,0 +1,19 @@
+// Bug: We weren't doing the normal replacement of array with pointer
+// for deduction in the context of a call because of the initializer list.
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct string
+{
+ string (const char *);
+};
+
+template <class T>
+struct vector
+{
+ template <class U>
+ vector (std::initializer_list<U>);
+};
+
+vector<string> v = { "a", "b", "c" };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist15.C
new file mode 100644
index 0000000..acd0495
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist15.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+// Just discard errors pointing at header files
+// { dg-prune-output "include" }
+
+#include <vector>
+#include <typeinfo>
+
+using namespace std;
+
+template< typename ... ArgTypes >
+void test( ArgTypes ... args ) {
+ vector<type_info*> x = { &typeid(ArgTypes)... }; // { dg-error "" }
+}
+
+int main()
+{
+ test( 1, 3.14f, 2.78 );
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist16.C
new file mode 100644
index 0000000..9132bd2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist16.C
@@ -0,0 +1,11 @@
+// { dg-do run { target c++11 } }
+
+extern "C" void abort();
+
+void f(int i) { if (i != 42) abort(); }
+
+int main()
+{
+ f({42});
+ return {0};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist17.C
new file mode 100644
index 0000000..6ff4689
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist17.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+void f(int i);
+
+int main()
+{
+ f({42.0}); // { dg-error "narrowing" }
+ return {1.0}; // { dg-error "narrowing" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist18.C
new file mode 100644
index 0000000..bcf90c8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist18.C
@@ -0,0 +1,18 @@
+// PR c++/40308, 40311
+// { dg-do run { target c++11 } }
+
+template< typename T >
+struct test {
+ test() : data{} {}
+
+ T data;
+};
+
+int main()
+{
+ test<int> x;
+ test<int*> y;
+ int * a = new int{};
+ int * b = new int{5};
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist19.C
new file mode 100644
index 0000000..ef47d3e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist19.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+// Allow other errors, too
+// { dg-prune-output "error" }
+
+void f(double);
+int main()
+{
+ f({{1}}); // { dg-error "too many braces" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist2.C
new file mode 100644
index 0000000..550c8f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist2.C
@@ -0,0 +1,31 @@
+// Test that conversion to std::initializer_list takes priority over other
+// user-defined conversions.
+
+// { dg-do link { target c++11 } }
+
+#include <initializer_list>
+
+struct string
+{
+ string (const char *) {}
+ template <class Iter> string (Iter, Iter);
+};
+
+template <class T, class U>
+struct pair
+{
+ pair (T t, U u) {}
+};
+
+template<class T, class U>
+struct map
+{
+ void insert (pair<T,U>);
+ void insert (std::initializer_list<pair<T,U> >) {}
+};
+
+int main()
+{
+ map<string,string> m;
+ m.insert({ {"this","that"}, {"me","you"} });
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist20.C
new file mode 100644
index 0000000..0ee37e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist20.C
@@ -0,0 +1,17 @@
+// PR c++/40689
+// { dg-do compile { target c++11 } }
+
+class X
+{
+ public:
+ X(): data {1,2,3,4,5} {}
+ private:
+ const short data[5];
+};
+
+int main()
+{
+ const float * pData = new const float[4] { 1.5, 2.5, 3.5, 4.5 };
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist21.C
new file mode 100644
index 0000000..6492b26
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist21.C
@@ -0,0 +1,17 @@
+// PR c++/40689
+// { dg-do compile { target c++11 } }
+
+class X
+{
+ public:
+ X(): data {1,2} {} // { dg-error "too many initializers" }
+ private:
+ const short data[1];
+};
+
+int f(int n)
+{
+ const float * pData = new const float[1] { 1.5, 2.5 }; // { dg-error "too many initializers" }
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist22.C
new file mode 100644
index 0000000..0cbfe24
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist22.C
@@ -0,0 +1,24 @@
+// Core issue 934/1288
+// { dg-do compile { target c++11 } }
+
+int i;
+
+int& r1{ i }; // OK, direct binding
+int&& r2{ i }; // { dg-error "" } binding && to lvalue
+
+int& r3{ }; // { dg-error "" } reference to temporary
+int&& r4{ }; // OK, reference to temporary
+
+struct A { int i; } a;
+
+A& r5 { i }; // { dg-error "" } reference to temporary
+A&& r6 { i }; // OK, aggregate initialization of temporary
+A& r7 { a }; // OK, direct-initialization
+A&& r8 { a }; // { dg-error "lvalue" } binding && to lvalue
+
+struct B { B(int); int i; } b(0);
+
+B& r9 { i }; // { dg-error "" } reference to temporary
+B&& r10 { i }; // OK, make temporary with B(int) constructor
+B& r11 { b }; // OK, direct-initialization
+B&& r12 { b }; // { dg-error "lvalue" } binding && to lvalue
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist23.C
new file mode 100644
index 0000000..7e73df0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist23.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ A& operator=(int i);
+ A& operator=(std::initializer_list<int> l) { return *this; }
+};
+
+int main()
+{
+ A a;
+ a = { };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist24.C
new file mode 100644
index 0000000..d885744
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist24.C
@@ -0,0 +1,9 @@
+// PR c++/39923
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+void test3()
+{
+ std::initializer_list<int> list{move}; // { dg-error "not declared|could not convert" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist25.C
new file mode 100644
index 0000000..dd41db1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist25.C
@@ -0,0 +1,16 @@
+// PR c++/41754
+// { dg-do run { target c++11 } }
+
+#include <map>
+#include <string>
+#include <iostream>
+
+using namespace std;
+
+int main()
+{
+ map<string, string> m;
+ m.insert({{"t", "t"}, {"y", "y"}});
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist26.C
new file mode 100644
index 0000000..81d304f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist26.C
@@ -0,0 +1,10 @@
+// PR c++/42059
+// { dg-do compile { target c++11 } }
+// { dg-options "" { target { ! c++1y } } }
+
+void
+foo (int i)
+{
+ int a[i];
+ a = { }; // { dg-error "assign" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist27.C
new file mode 100644
index 0000000..8567119
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist27.C
@@ -0,0 +1,4 @@
+// PR c++/42061
+// { dg-do compile { target c++11 } }
+
+int& i = { j }; // { dg-error "invalid initialization|was not declared" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist28.C
new file mode 100644
index 0000000..3bf995a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist28.C
@@ -0,0 +1,8 @@
+// PR c++/42060
+// { dg-do compile { target c++11 } }
+
+void foo()
+{
+ int a[1];
+ throw a = {}; // { dg-error "assign" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist29.C
new file mode 100644
index 0000000..9174164
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist29.C
@@ -0,0 +1,14 @@
+// PR c++/42331
+// { dg-do compile { target c++11 } }
+
+class Mesh
+{
+public:
+ Mesh(const char*)
+ { typele={0}; } // { dg-error "" }
+
+private:
+ int typele[7][2];
+};
+
+Mesh m(0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist3.C
new file mode 100644
index 0000000..e62e0cc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist3.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template <class T> void f(std::initializer_list<T>);
+
+void g()
+{
+ f({1,2,3});
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist30.C
new file mode 100644
index 0000000..eb78f3c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist30.C
@@ -0,0 +1,12 @@
+// Testcase for variadic init list deduction.
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template <class... Ts>
+void f (std::initializer_list<Ts>... ls);
+
+int main()
+{
+ f({1},{2.0});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist31.C
new file mode 100644
index 0000000..f34a0ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist31.C
@@ -0,0 +1,13 @@
+// PR c++/43028
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct string { string(std::initializer_list<char>) { } };
+
+void f() {
+ auto y =
+ {
+ string(Equation()) // { dg-error "not declared" }
+ }; // { dg-error "unable to deduce" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist32.C
new file mode 100644
index 0000000..c5c02fc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist32.C
@@ -0,0 +1,21 @@
+// Test that we try normal init if no list ctor is viable.
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct B {};
+
+struct C
+{
+ C(B);
+};
+
+struct A
+{
+ A(std::initializer_list<int>);
+ A(B) { }
+ A(C);
+};
+
+B b;
+A a{b};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist33.C
new file mode 100644
index 0000000..9ab4b55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist33.C
@@ -0,0 +1,13 @@
+// PR c++/44045
+// { dg-do compile { target c++11 } }
+
+struct base
+{
+ virtual ~base() { }
+};
+
+int main()
+{
+ base ptr_array[1];
+ ptr_array = { base() }; // { dg-error "assign" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist34.C
new file mode 100644
index 0000000..335a7da
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist34.C
@@ -0,0 +1,14 @@
+// PR c++/44157
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+template<typename T>
+void f(T) { }
+
+int main() {
+ std::initializer_list<int> a = { 0 };
+ f(a);
+
+ f<std::initializer_list<int> >({ 0 });
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist35.C
new file mode 100644
index 0000000..f8b824d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist35.C
@@ -0,0 +1,24 @@
+// PR c++/41510
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ B(int, int);
+};
+struct A
+{
+ A(int, int);
+ A(const B&);
+};
+
+void f()
+{
+ A a = { 1, 2 };
+}
+
+template <class T> void g()
+{
+ A a = { 1, 2 };
+}
+
+template void g<int>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist36.C
new file mode 100644
index 0000000..2a2b208
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist36.C
@@ -0,0 +1,23 @@
+// PR c++/44358
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ A(int);
+};
+
+struct B
+{
+ B(std::initializer_list<A>);
+};
+
+void f (B b);
+int main()
+{
+ B b0 = {{1}};
+ B b1 = {{1.0}}; // { dg-error "narrowing" }
+ B b2 {1.0}; // { dg-error "narrowing" }
+ A a {1.0}; // { dg-error "narrowing" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist37.C
new file mode 100644
index 0000000..dfe6d4a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist37.C
@@ -0,0 +1,24 @@
+// DR 990
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct S {
+ S(std::initializer_list<double>); // #1
+ S(std::initializer_list<int>); // #2
+ S(); // #3
+ // ...
+};
+S s1 = { 1.0, 2.0, 3.0 }; // invoke #1
+S s2 = { 1, 2, 3 }; // invoke #2
+S s3 = { }; // invoke #3 (for value-initialization)
+
+
+// Test some other situations, too.
+void f (S);
+int main()
+{
+ S s4 { };
+ f({ });
+ S {};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist38.C
new file mode 100644
index 0000000..816f94c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist38.C
@@ -0,0 +1,21 @@
+// DR 990
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A {
+ A(std::initializer_list<int>); // #1
+};
+struct B {
+ A a;
+};
+
+void f (B);
+int main()
+{
+ B{};
+ f({});
+ B b0 = { };
+ B b1 { }; // OK, uses #1
+ B b2 { 1 }; // { dg-error "could not convert" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist39.C
new file mode 100644
index 0000000..169c063
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist39.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+struct A { int i; };
+
+void f (const A &);
+void f (A &&);
+
+void g (A, int);
+void g (A, double);
+
+int main()
+{
+ f ( { 1 } );
+ g ( { 1 }, 1 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist4.C
new file mode 100644
index 0000000..22e6b45
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist4.C
@@ -0,0 +1,32 @@
+// Test for initializer-list 'explicit' rule
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ explicit A(int,int);
+ operator bool();
+};
+
+A f(A)
+{
+ A{1,2};
+ A a1{1,2};
+ new A{1,2};
+ if (A a5{1,2});
+
+ A({1,2}); // { dg-error "explicit" }
+ A a2({1,2}); // { dg-error "explicit" }
+ A a3 = {1,2}; // { dg-error "explicit" }
+ new A({1,2}); // { dg-error "explicit" }
+ f({1,2}); // { dg-error "explicit" }
+ a1 = {1,2}; // { dg-error "explicit" }
+ if (A a4 = {1,2}); // { dg-error "explicit" }
+ return {1,2}; // { dg-error "explicit" }
+}
+
+struct B
+{
+ A a;
+ B(): a{1,2} {}
+ B(const B&): a({1,2}) {} // { dg-error "explicit" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist40.C
new file mode 100644
index 0000000..6e6a11a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist40.C
@@ -0,0 +1,13 @@
+// PR c++/54835, DR 1518
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ explicit A(int = 42);
+};
+
+int main()
+{
+ A a1 = { }; // { dg-error "explicit" }
+ A a2 = { 24 }; // { dg-error "explicit" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist41.C
new file mode 100644
index 0000000..7ae4928
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist41.C
@@ -0,0 +1,14 @@
+// PR c++/44703
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+typedef std::initializer_list<int> type ;
+void f(type) {}
+
+int main()
+{
+// error: could not convert '{1, 2, 3}' to 'type'
+ f({1,2,3}) ;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist42.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist42.C
new file mode 100644
index 0000000..fcd71cc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist42.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+enum Unscoped { };
+enum class Scoped { };
+
+Unscoped bar(Unscoped x) { return x; }
+Scoped bar(Scoped x) { return x; }
+
+auto var1u = bar(Unscoped()); // OK
+auto var1s = bar(Scoped()); // OK
+
+auto var2u = bar(Unscoped{}); // #1 Error, but should work
+auto var2s = bar(Scoped{}); // #2 Error, but should work
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist43.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist43.C
new file mode 100644
index 0000000..1cae23a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist43.C
@@ -0,0 +1,7 @@
+// Test that using T{} at file scope doesn't create a static temporary.
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler-not "local" } }
+
+struct A { };
+
+A a = A{};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist44.C
new file mode 100644
index 0000000..609e07b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist44.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+auto value = std::initializer_list<int>{ 1, 2, 3 };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist45.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist45.C
new file mode 100644
index 0000000..31bd18d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist45.C
@@ -0,0 +1,13 @@
+// PR c++/46289
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i[2];
+};
+
+struct B
+{
+ A a;
+ B(): a({{1,2}}) { }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist46.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist46.C
new file mode 100644
index 0000000..39a3b5e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist46.C
@@ -0,0 +1,14 @@
+// PR c++/48281
+// { dg-options "-O2" }
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+typedef std::initializer_list<int> int1;
+typedef std::initializer_list<int1> int2;
+static int2 ib = {{42,2,3,4,5},{2,3,4,5,1},{3,4,5,2,1}};
+
+int main()
+{
+ return *(ib.begin()->begin()) != 42;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist47.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist47.C
new file mode 100644
index 0000000..0b34ff9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist47.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct A { ~A() = delete; }; // { dg-message "declared" }
+
+int main()
+{
+ typedef const A cA[2];
+ cA{}; // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist48.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist48.C
new file mode 100644
index 0000000..7a79c67
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist48.C
@@ -0,0 +1,11 @@
+// PR c++/48726
+// { dg-do compile { target c++11 } }
+
+#include <memory>
+
+struct Foo{
+ int i;
+};
+typedef std::unique_ptr<Foo> up;
+
+std::initializer_list<up> il{up{new Foo}, up{new Foo}};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist49.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist49.C
new file mode 100644
index 0000000..0fa4e3f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist49.C
@@ -0,0 +1,17 @@
+// Test for non-trivial list-initialization with array new.
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ enum E { c_string, number } e;
+ A(const char *): e(c_string) {}
+ A(int): e(number) {}
+};
+
+int main()
+{
+ A* ap = new A[2]{1, ""};
+ if (ap[0].e != A::number || ap[1].e != A::c_string)
+ return 1;
+ delete[] ap;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist5.C
new file mode 100644
index 0000000..5f253ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist5.C
@@ -0,0 +1,35 @@
+// Test for narrowing diagnostics
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A { int i; int j; };
+A a2 { 1.2 }; // { dg-error "narrowing" }
+A a1 { 1, 2 }; // aggregate initialization
+struct B {
+ B(std::initializer_list<int>);
+};
+B b1 { 1, 2 }; // creates initializer_list<int> and calls constructor
+B b2 { 1, 2.0 }; // { dg-error "narrowing" }
+struct C {
+ C(int i, double j);
+};
+C c1 = { 1, 2.2 }; // calls constructor with arguments (1, 2.2)
+C c2 = { 1.1, 2 }; // { dg-error "narrowing" }
+
+int j { 1 }; // initialize to 1
+int k {}; // initialize to 0
+
+// PR c++/36963
+double d = 1.1;
+float fa[] = { d, 1.1 }; // { dg-error "narrowing conversion of 'd'" }
+constexpr double d2 = 1.1;
+float fa2[] = { d2, 1.1 };
+
+// PR c++/49577
+unsigned u{ -1 }; // { dg-error "narrowing" }
+char c = char{ u }; // { dg-error "narrowing" }
+
+// PR c++/50011
+short unsigned su;
+int i { su };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist50.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist50.C
new file mode 100644
index 0000000..41fb03b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist50.C
@@ -0,0 +1,21 @@
+// PR c++/45418
+// { dg-do compile { target c++11 } }
+
+struct A1 { };
+struct A2 {
+ A2();
+};
+
+template <class T> struct B {
+ T ar[1];
+ B(T t):ar{t} {}
+};
+
+int main(){
+ B<int> bi{1};
+ A1 a1;
+ B<A1> ba1{a1};
+ A2 a2;
+ A2 a2r[1]{{a2}};
+ B<A2> ba2{a2};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist51.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist51.C
new file mode 100644
index 0000000..9fd750d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist51.C
@@ -0,0 +1,15 @@
+// PR c++/47184
+// { dg-do compile { target c++11 } }
+
+struct S
+{
+ int a;
+};
+struct T
+{
+ T(S s) {}
+};
+int main()
+{
+ T t(S{1});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist52.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist52.C
new file mode 100644
index 0000000..3ca8781
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist52.C
@@ -0,0 +1,7 @@
+// PR c++/45378
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ int x { 22.2 }; // { dg-error "narrowing" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist53.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist53.C
new file mode 100644
index 0000000..998e4c8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist53.C
@@ -0,0 +1,21 @@
+// PR c++/49216
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+extern "C" void abort();
+void * operator new[] (__SIZE_TYPE__, void *p) { return p; }
+
+bool constructed;
+
+struct A
+{
+ A(std::initializer_list<int>) { constructed = true; }
+};
+
+int main() {
+ new A[1]{};
+ int space[1] = { 42 };
+ int *p = new (space) int[1]{};
+ if (p[0] != 0 || !constructed)
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist54.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist54.C
new file mode 100644
index 0000000..52a8ff9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist54.C
@@ -0,0 +1,13 @@
+// PR c++/49355
+// { dg-do compile { target c++11 } }
+
+#include <string>
+
+struct T {
+ std::string foobar;
+};
+
+int main()
+{
+ T* x = new T({""});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist55.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist55.C
new file mode 100644
index 0000000..a40edd3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist55.C
@@ -0,0 +1,6 @@
+// Test for -Wno-narrowing
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic-errors -Wno-narrowing" }
+
+int i;
+float d = { i };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist56.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist56.C
new file mode 100644
index 0000000..5339dbf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist56.C
@@ -0,0 +1,37 @@
+// PR c++/47453
+// { dg-do compile { target c++11 } }
+
+// invalid
+int a({0}); // { dg-error "" }
+
+// invalid
+int const &b({0}); // { dg-error "" }
+
+// invalid
+struct A1 { int a[2]; A1(); };
+A1::A1():a({1, 2}) { } // { dg-error "" }
+
+struct A { explicit A(int, int); A(int, long); };
+
+// invalid
+A c({1, 2}); // { dg-error "" }
+
+// valid (by copy constructor).
+A d({1, 2L});
+
+// valid
+A e{1, 2};
+
+#include <initializer_list>
+
+struct B {
+ template<typename ...T>
+ B(std::initializer_list<int>, T ...);
+};
+
+// invalid (the first phase only considers init-list ctors)
+// (for the second phase, no constructor is viable)
+B f{1, 2, 3}; // { dg-error "" }
+
+// valid (T deduced to <>).
+B g({1, 2, 3});
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist57.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist57.C
new file mode 100644
index 0000000..5c59f40
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist57.C
@@ -0,0 +1,8 @@
+// PR c++/50054
+// { dg-do compile { target c++11 } }
+
+void g( const int& (a)[1] ) {} // { dg-error "array of references" }
+
+int main () {
+ g( { 1, 2 } ); // { dg-error "initializer list" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist58.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist58.C
new file mode 100644
index 0000000..aab21e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist58.C
@@ -0,0 +1,17 @@
+// PR c++/50209
+// { dg-do compile { target c++11 } }
+
+struct S { int i,j; };
+
+struct A
+{
+ static void f (S = {1,2});
+};
+
+void f (S = {3,4});
+
+int main()
+{
+ A::f();
+ f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist59.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist59.C
new file mode 100644
index 0000000..6371c16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist59.C
@@ -0,0 +1,18 @@
+// PR c++/49996
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ ~A()
+ { }
+};
+
+struct B
+{
+ const A& ref;
+};
+
+int main()
+{
+ B* p = new B{A()};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist6.C
new file mode 100644
index 0000000..3d02960
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist6.C
@@ -0,0 +1,29 @@
+// Test for initlist lifetime
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+int c;
+
+struct A
+{
+ A(int,int) { ++c; }
+ ~A() { --c; }
+};
+
+void f (std::initializer_list<A> l) { }
+
+int main()
+{
+ f({ {1,2}, {3,4} });
+ if (c != 0)
+ return 1;
+
+ {
+ std::initializer_list<A> l { {1,2}, {3,4} };
+ if (c != 2)
+ return 2;
+ }
+ if (c != 0)
+ return 3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist61.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist61.C
new file mode 100644
index 0000000..28eccc2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist61.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct N { N(int); };
+struct A { N i,j; };
+
+int main()
+{
+ A* ap = new A{1,2};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist62.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist62.C
new file mode 100644
index 0000000..d739ea3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist62.C
@@ -0,0 +1,10 @@
+// PR c++/51399
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ std::initializer_list<int> x[1] = { 0 }; // { dg-error "could not convert" }
+ A() {}
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist63.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist63.C
new file mode 100644
index 0000000..0094047
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist63.C
@@ -0,0 +1,16 @@
+// Origin PR c++/51475
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A
+{
+ A(int*);
+};
+
+struct B
+{
+ const std::initializer_list<A>& x;
+};
+
+B b = {{1}}; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist64.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist64.C
new file mode 100644
index 0000000..78e5308
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist64.C
@@ -0,0 +1,29 @@
+// PR c++/51553
+// { dg-do compile { target c++11 } }
+
+struct X
+{
+ X();
+};
+
+struct Y
+{
+ operator X() const;
+};
+
+struct Z
+{
+ explicit operator X() const;
+};
+
+X a = { Y() };
+X aa = Y();
+
+X b{ Y() };
+X bb(Y());
+
+X c = { Z() }; // { dg-error "" }
+X cc = Z(); // { dg-error "" }
+
+X d{ Z() };
+X dd( Z() );
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist65.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist65.C
new file mode 100644
index 0000000..061734f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist65.C
@@ -0,0 +1,9 @@
+// Core 1270
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i[2];
+};
+
+A f() { return {1,2}; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist66.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist66.C
new file mode 100644
index 0000000..4fc162e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist66.C
@@ -0,0 +1,29 @@
+// PR c++/52510
+// { dg-do compile { target c++11 } }
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
+typedef uint64_t upad64_t;
+
+typedef struct _pthread_cond {
+ struct {
+ uint8_t __pthread_cond_flag[4];
+ uint16_t __pthread_cond_type;
+ uint16_t __pthread_cond_magic;
+ } __pthread_cond_flags;
+ upad64_t __pthread_cond_data;
+} pthread_cond_t;
+
+class gtm_rwlock
+{
+ pthread_cond_t c_readers;
+ public:
+ gtm_rwlock();
+};
+
+gtm_rwlock::gtm_rwlock()
+ : c_readers ({{{0, 0, 0, 0}, 0, 0x4356}, 0})
+{ }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist67.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist67.C
new file mode 100644
index 0000000..491d4cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist67.C
@@ -0,0 +1,27 @@
+// PR c++/50478
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+namespace std
+{
+ template<typename _Key>
+ struct set
+ {
+ void insert(const _Key&);
+ void insert(initializer_list<_Key>);
+ };
+
+ struct string
+ {
+ string(const string&, __SIZE_TYPE__, __SIZE_TYPE__ = -1);
+ string(const char*);
+ string(initializer_list<char>);
+ };
+}
+
+int main()
+{
+ std::set<std::string> s;
+ s.insert( { "abc", "def", "hij"} );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist68.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist68.C
new file mode 100644
index 0000000..7cfe1a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist68.C
@@ -0,0 +1,20 @@
+// PR c++/56772
+// { dg-require-effective-target c++11 }
+
+typedef __SIZE_TYPE__ size_t;
+void* operator new[](size_t, void *p) { return p; }
+template <typename T = size_t>
+void f ()
+{
+ size_t coord [2][2];
+ new (&coord) size_t [2][2]
+ {
+ {0,0},
+ {0,0},
+ };
+}
+
+int main ()
+{
+ f<>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist69.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist69.C
new file mode 100644
index 0000000..5d59dfe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist69.C
@@ -0,0 +1,29 @@
+// PR c++/50261
+// { dg-require-effective-target c++11 }
+
+template <typename T>
+struct ca {
+ T elem[1];
+
+ ca(const T (&s)[1]): elem{{s}} { } // { dg-error "braces" }
+ ca(const T (&s)[1],int): elem({{s}}) { } // { dg-error "paren|invalid" }
+ ca(const T (&s)[1],char): elem(s) { } // { dg-error "array" }
+ ca(const T (&s)[1],double): elem{s} { } // { dg-error "invalid" }
+
+ ca(const T &v): elem{{v}} { } // { dg-error "braces" }
+ ca(const T &v,int): elem{{{v}}} { } // { dg-error "braces" }
+ ca(const T &v,char): elem{v} { } // OK
+ ca(const T &v,double): elem({v}) { } // { dg-error "paren" }
+};
+
+int main() {
+ int a[1] = {0};
+ ca<int> d(a);
+ ca<int> d1(a,1);
+ ca<int> d2(a,'2');
+ ca<int> d3(a,3.0);
+ ca<int> e(a[0]);
+ ca<int> e1(a[0],1);
+ ca<int> e2(a[0],'2');
+ ca<int> e3(a[0],3.0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist7.C
new file mode 100644
index 0000000..7dbbf2d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist7.C
@@ -0,0 +1,12 @@
+// PR c++/37932
+// { dg-do compile { target c++11 } }
+
+typedef enum { AA=1, BB=2 } my_enum;
+
+typedef struct { my_enum a:4 ; unsigned b:28; } stru;
+
+void foo (char c, my_enum x, int i)
+{
+ char arr[2] = {c+'0', 0}; // { dg-error "narrowing" }
+ stru s = {x,0};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist70.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist70.C
new file mode 100644
index 0000000..f215b9d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist70.C
@@ -0,0 +1,27 @@
+// PR c++/57196
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+template<class T>
+struct set {
+ set() = default;
+ set(std::initializer_list<T>){}
+};
+
+struct string {
+ string(const char*){}
+ ~string(){}
+};
+
+typedef decltype(sizeof(0)) size_t;
+
+template <size_t> struct EqHelper { };
+
+int IsNullLiteralHelper(...);
+
+void Fn() {
+ EqHelper<sizeof IsNullLiteralHelper(set<int>{1})> eq1; // ok
+ EqHelper<sizeof IsNullLiteralHelper(set<string>())> eq2; // ok
+ EqHelper<sizeof IsNullLiteralHelper(set<string>{"foo"})> eq3; // error
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist71.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist71.C
new file mode 100644
index 0000000..1d14390
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist71.C
@@ -0,0 +1,10 @@
+// PR c++/56930
+// { dg-require-effective-target c++11 }
+// { dg-options -Wconversion }
+
+int main()
+{
+ int x = sizeof(int);
+ int y { sizeof(int) };
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist72.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist72.C
new file mode 100644
index 0000000..98fc79f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist72.C
@@ -0,0 +1,22 @@
+// DR 1589
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+struct Pair
+{
+ Pair(const char *, const char *);
+};
+
+struct String
+{
+ String(const char *);
+};
+
+void f1(int); // #1
+int f1(std::initializer_list<long>); // #2
+int g1() { return f1({42}); } // chooses #2
+
+void f2(Pair); // #3
+int f2(std::initializer_list<String>); // #4
+int g2() { return f2({"foo","bar"}); } // chooses #4
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist73.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist73.C
new file mode 100644
index 0000000..de9748d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist73.C
@@ -0,0 +1,13 @@
+// PR c++/57682
+// { dg-do compile { target c++11 } }
+
+struct Class
+{
+ Class (int func)
+ try
+ : f { func } { }
+ catch ( ... ) { }
+
+private:
+ int f;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist74.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist74.C
new file mode 100644
index 0000000..4305b59
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist74.C
@@ -0,0 +1,7 @@
+// Core 1591
+// { dg-require-effective-target c++11 }
+
+template<class T, int N> void g(T const (&)[N]);
+void f() {
+ g( { 1, 2, 3, 4 } );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist75.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist75.C
new file mode 100644
index 0000000..f185401
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist75.C
@@ -0,0 +1,6 @@
+// PR c++/59080
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+auto foo[] = {}; // { dg-error "auto|unable to deduce" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist76.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist76.C
new file mode 100644
index 0000000..ac419dd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist76.C
@@ -0,0 +1,5 @@
+// PR c++/58812
+// { dg-require-effective-target c++11 }
+
+int i;
+int&& j{{ i }}; // { dg-error "too many braces" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist77.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist77.C
new file mode 100644
index 0000000..49b9079
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist77.C
@@ -0,0 +1,10 @@
+// PR c++/58651
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ int i;
+ A(int j) : i{{j}} {} // { dg-error "too many braces" }
+};
+
+A a(0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist78.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist78.C
new file mode 100644
index 0000000..648ec53
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist78.C
@@ -0,0 +1,12 @@
+// PR c++/58639
+// { dg-require-effective-target c++11 }
+
+struct node {
+ node &parent;
+};
+
+struct vector {
+ node n;
+};
+
+vector v({}); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist79.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist79.C
new file mode 100644
index 0000000..5a1914d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist79.C
@@ -0,0 +1,8 @@
+// PR c++/59646
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+struct A {};
+
+std::initializer_list<volatile A> x = {{}};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist8.C
new file mode 100644
index 0000000..ca0bc46
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist8.C
@@ -0,0 +1,19 @@
+// PR c++/37740
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+};
+
+struct B
+{
+ double d;
+ A i;
+};
+
+int main()
+{
+ A a;
+ new B{3.2, a};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist80.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist80.C
new file mode 100644
index 0000000..7947f1f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist80.C
@@ -0,0 +1,6 @@
+// PR c++/60051
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+auto x[2] = {}; // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist9.C
new file mode 100644
index 0000000..bb6414c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/initlist9.C
@@ -0,0 +1,29 @@
+// PR c++/37860
+// { dg-do compile { target c++11 } }
+
+struct b
+{
+ bool t;
+
+ b() = default;
+ ~b() = default;
+ b& operator=(const b&) = delete;
+ b(const b&) = delete; // { dg-message "declared" }
+
+ b(bool _t): t (_t) { }
+};
+
+int main()
+{
+ // copy list initialization
+ b tst1 = { false };
+
+ // copy initialization.
+ b tst2 = false; // { dg-error "use" }
+
+ // direct list initialization
+ b tst3 { false };
+
+ // default initialization
+ b tst4;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns1.C
new file mode 100644
index 0000000..69813b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns1.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1Q2V11fEv" } }
+// { dg-final { scan-assembler "_ZN1Q2V11iE" } }
+
+namespace Q {
+ inline namespace V1 {
+ extern int i;
+ void f();
+ }
+}
+int Q::i = 1;
+void Q::f() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns2.C
new file mode 100644
index 0000000..6ad9d65
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns2.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+
+namespace Q {
+ inline namespace V1 {
+ extern int i; // { dg-message "" }
+ extern int j; // { dg-message "" }
+ void f(); // { dg-message "" }
+ void g(); // { dg-message "" }
+ }
+ inline namespace V2 {
+ extern int j; // { dg-message "" }
+ void g(); // { dg-message "" }
+ }
+ extern int i; // { dg-message "" }
+ void f(); // { dg-message "" }
+ void h();
+}
+namespace R {
+ using namespace Q;
+}
+int Q::i = 1; // { dg-error "ambiguous" }
+int Q::j = 1; // { dg-error "ambiguous" }
+void Q::f() { } // { dg-error "ambiguous" }
+void Q::g() { } // { dg-error "ambiguous" }
+void R::h() { } // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns3.C
new file mode 100644
index 0000000..7e24e80
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns3.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+
+namespace C
+{
+ void f();
+}
+
+namespace B
+{
+ using namespace C;
+
+ inline namespace B1
+ {
+ void f();
+ }
+}
+
+namespace A
+{
+ using namespace B;
+}
+
+int main()
+{
+ A::f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns4.C
new file mode 100644
index 0000000..25caefc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns4.C
@@ -0,0 +1,2 @@
+// { dg-options "-std=gnu++98 -pedantic" }
+inline namespace { } // { dg-warning "inline namespaces" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns5.C
new file mode 100644
index 0000000..20a3dc6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/inline-ns5.C
@@ -0,0 +1,2 @@
+// { dg-options "-std=gnu++98 -pedantic-errors" }
+inline namespace { } // { dg-error "inline namespaces" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/iop.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/iop.C
new file mode 100644
index 0000000..0a78be9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/iop.C
@@ -0,0 +1,41 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test that the implicit object parameter is *not* an rvalue reference, but is instead
+// identical to that specified in C++03. That is, the implicit object parameter is
+// an lvalue reference that can bind to an rvalue. :-\
+// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html under the
+// section "Revision 1 Summary and Rationale" for more details.
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+
+struct os
+{
+ one operator<<(int);
+};
+
+struct A
+{
+ A(int);
+};
+
+two operator<<(os&, const A&);
+
+void test()
+{
+ os o;
+ sa<sizeof(o << 1) == 1 * sizeof(long)> t1; // Calls os::operator<<(int)
+ // Would be ambiguous if the implicit object parameter
+ // was an rvalue reference.
+}
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C
new file mode 100644
index 0000000..4da9d46
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-50220.C
@@ -0,0 +1,9 @@
+// PR c++/50220
+// { dg-do compile { target c++11 } }
+
+template<typename Foo> struct Foobar {};
+
+void foobar(const Foobar<void>& obj)
+{
+ [obj](){}();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C
new file mode 100644
index 0000000..ff1085f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C
@@ -0,0 +1,8 @@
+// PR c++/46159
+// { dg-options -std=c++98 }
+
+void
+f()
+{
+ int **p = new(int(*[2]));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
new file mode 100644
index 0000000..52bb874
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
@@ -0,0 +1,8 @@
+// PR c++/44160
+// { dg-do link { target c++11 } }
+
+int main()
+{
+ const char *p = []() { return __func__; }();
+ return p == 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-anon1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-anon1.C
new file mode 100644
index 0000000..482193e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-anon1.C
@@ -0,0 +1,18 @@
+// DR 1612
+// { dg-require-effective-target c++11 }
+
+int main() {
+ static int result;
+ struct A { int x; };
+ struct B { int y; };
+ union {
+ A a; B b;
+ };
+ a.x = 1;
+ [=]() mutable {
+ a.x = 2; // { dg-error "anonymous union" }
+ result = b.y; // { dg-error "anonymous union" }
+ }();
+ if (result == 1) return 0;
+ throw 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array.C
new file mode 100644
index 0000000..adb40ed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-array.C
@@ -0,0 +1,19 @@
+// Test that array capture by copy works.
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i;
+ A(int i): i(i) {}
+ A(const A& a): i(a.i+1) {}
+};
+
+int main()
+{
+ A ar[4][3] = { { 10, 20, 30 },
+ { 40, 50, 60 },
+ { 70, 80, 90 },
+ { 100, 110, 120 } };
+ int i = [ar] { return ar[1][1]; }().i;
+ return (i!= 52);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C
new file mode 100644
index 0000000..d13e2c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C
@@ -0,0 +1,14 @@
+// PR c++/50437
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+void f()
+{
+ auto g = [](T t){ return t == 0; };
+ g(T());
+}
+
+int main()
+{
+ f<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto2.C
new file mode 100644
index 0000000..05fadf5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto2.C
@@ -0,0 +1,16 @@
+// PR c++/56901
+// { dg-require-effective-target c++11 }
+
+template <typename>
+void foo_impl()
+{
+ int data;
+ auto L = [&](){ return data; };
+ [&](){ L(); }();
+ [&L](){ L(); }();
+}
+
+void foo()
+{
+ foo_impl<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C
new file mode 100644
index 0000000..013ed52
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C
@@ -0,0 +1,24 @@
+// PR c++/57526
+// { dg-require-effective-target c++11 }
+
+template<class T>
+struct A
+{
+ void bar( ) { }
+
+ void foo( )
+ {
+ auto* this_ptr = this;
+ auto lc = [&]( )
+ {
+ this_ptr->bar();
+ };
+ lc();
+ }
+};
+
+int main()
+{
+ A<int> a;
+ a.foo();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref-neg.C
new file mode 100644
index 0000000..9c9632c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref-neg.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+#include <cassert>
+
+int main() {
+ int i = 1, j = 2;
+ const int& ci = i;
+ [&ci, &j] () -> void { j = ci; } ();
+ assert(i == 1);
+ assert(j == 1);
+ [&ci] () -> void { ci = 0; } (); // { dg-error "" "cannot assign to const int&" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref.C
new file mode 100644
index 0000000..16fd0a7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-const-ref.C
@@ -0,0 +1,14 @@
+// { dg-do run { target c++11 } }
+#include <cassert>
+
+int main() {
+ int i = 1, j = 2;
+ const int& ci = i;
+ [&ci, &j] () -> void { j = ci; } ();
+ assert(i == 1);
+ assert(j == 1);
+ //[&ci] () -> void { ci = 0; } (); { dg-error: cannot assign to const int& }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C
new file mode 100644
index 0000000..3f9da7e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C
@@ -0,0 +1,15 @@
+// PR c++/50736
+// { dg-do compile { target c++11 } }
+
+int i;
+void f();
+typedef int T;
+
+int main()
+{
+ [i]{}; // { dg-error "non-automatic" }
+ [f]{}; // { dg-error "non-variable" }
+ [T]{}; // { dg-error "non-variable" }
+}
+
+struct A { };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C
new file mode 100644
index 0000000..49fbdf3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C
@@ -0,0 +1,13 @@
+// FDIS 5.1.2/8
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic-errors" }
+
+struct S2 { void f(int i); };
+void S2::f(int i) {
+ [&, i]{ }; // OK
+ [&, &i]{ }; // { dg-error "" } i preceded by & when & is the default
+ [=, i]{ }; // { dg-error "" } i not preceded by & when = is the default
+ [=, this]{ }; // { dg-error "" } this when = is the default
+ [i, i]{ }; // { dg-error "" } i repeated
+ [this, this]{ }; // { dg-error "" } i repeated
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-neg.C
new file mode 100644
index 0000000..28ea533
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-neg.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+#include <cassert>
+
+template<typename F>
+void call(const F& f) { f(); }
+
+int main() {
+ call([] () -> void {});
+ call([] () mutable -> void {});
+
+ int i = -1;
+ call([&i] () -> void { i = 0; });
+ assert(i == 0);
+ call([i] () -> void { i = 0; }); // { dg-error "" "assignment to non-reference capture in const lambda" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const.C
new file mode 100644
index 0000000..c6150f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const.C
@@ -0,0 +1,19 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+template<typename F>
+void call(const F& f) { f(); }
+
+int main() {
+ call([] () -> void {});
+ //call([] () mutable -> void {}); // { dg-error: "`f' does not have const `operator()'" }
+
+ int i = -1;
+ call([&i] () -> void { i = 0; });
+ assert(i == 0);
+ //call([i] () -> void { i = 0; }); // { dg-error: "assignment to non-reference capture in const lambda" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C
new file mode 100644
index 0000000..884163a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C
@@ -0,0 +1,15 @@
+// PR c++/52026
+// { dg-options "-O" }
+// { dg-do run { target c++11 } }
+
+template<bool B>
+int func() {
+ const int constVal1 = B ? 100 : -100;
+ const int constVal = constVal1;
+ return [] { return constVal; }();
+}
+
+int main() {
+ if (func<true>() != 100)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
new file mode 100644
index 0000000..08d8bbf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
@@ -0,0 +1,14 @@
+// Test for conversion from stateless lambda to function pointer.
+
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZZ1fvENKUlvE_cvPFvvEEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin *-*-hpux10* } } } } }
+
+inline void f()
+{
+ void (*pfn)() = []{};
+}
+
+int main()
+{
+ f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv2.C
new file mode 100644
index 0000000..cd4cf7e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv2.C
@@ -0,0 +1,11 @@
+// Test for conversion from stateless lambda to function pointer.
+
+// { dg-do run { target c++11 } }
+
+typedef int (*pfn)(int);
+
+int main()
+{
+ pfn p = [](int i) { return i-42; };
+ return p (42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv3.C
new file mode 100644
index 0000000..ebc6c14
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv3.C
@@ -0,0 +1,12 @@
+// Conversion to a function pointer uses a generic thunk, which doesn't
+// work properly for variadics. Make sure that we can still use the lambda
+// normally.
+
+// { dg-do compile { target c++11 } }
+
+void f()
+{
+ auto l = [](...){};
+ void (*p1)(...) = l; // { dg-bogus "sorry" "" { xfail *-*-* } }
+ l(); // OK
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv4.C
new file mode 100644
index 0000000..66c0910
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv4.C
@@ -0,0 +1,13 @@
+// PR c++/43641
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ int i;
+};
+
+void func()
+{
+ [](const B& b) -> const int& { return b.i; };
+ [](const B& b) { return b; };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv5.C
new file mode 100644
index 0000000..f5408a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv5.C
@@ -0,0 +1,15 @@
+// PR c++/45080
+// { dg-do compile { target c++11 } }
+
+typedef void(*pfn)();
+
+template<typename=int>
+void f()
+{
+ pfn fn = []{};
+}
+
+void test()
+{
+ f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C
new file mode 100644
index 0000000..3b3fda9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C
@@ -0,0 +1,6 @@
+// PR c++/55015
+// { dg-do link { target c++11 } }
+
+typedef void (*VoidFunc)();
+inline VoidFunc GetFunc() { return [](){}; }
+int main() { VoidFunc func = GetFunc(); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C
new file mode 100644
index 0000000..89e4e4b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C
@@ -0,0 +1,20 @@
+// PR c++/55710
+// { dg-do link { target c++11 } }
+
+template <class T>
+struct X {
+ static void (*code) ();
+};
+
+template <class T>
+void (*X<T>::code) () = []{}; // Line 7
+
+struct Y {
+ void (*code) () = []{} ; // Line 10
+ void operator()() { code(); }
+};
+
+int main () {
+ X<int>::code();
+ Y()();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C
new file mode 100644
index 0000000..abe272a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C
@@ -0,0 +1,15 @@
+// PR c++/56447
+// { dg-do compile { target c++11 } }
+
+template <class T>
+void f()
+{
+ int i;
+ // This lambda should not have a conversion op, since it captures i
+ int (*p)() = [=]{ return i; }; // { dg-error "cannot convert" }
+}
+
+int main()
+{
+ f<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default-neg.C
new file mode 100644
index 0000000..91f5d62
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default-neg.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+int main() {
+ int i;
+ const char* s;
+ [=] () -> void { i; s; i; s; } ();
+
+ [] () -> void { i; } (); // { dg-error "" "`i' is not captured" }
+ [1] () -> void {} (); // { dg-error "expected identifier" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default.C
new file mode 100644
index 0000000..232c56b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-default.C
@@ -0,0 +1,13 @@
+// { dg-do run { target c++11 } }
+
+int main() {
+ int i;
+ const char* s;
+ [=] () -> void { i; s; i; s; } ();
+
+ //[] () -> void { i; } (); // { dg-error: "`i' is not in scope" }
+ //[1] () -> void {} (); // { dg-error: "expected identifier" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-neg.C
new file mode 100644
index 0000000..caffb7f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy-neg.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+int main() {
+ int i;
+ const char* s;
+ [i, s] () -> void { i; s; } ();
+
+ [] () -> void { i; } (); // { dg-error "" "`i' is not captured" }
+ [1] () -> void {} (); // { dg-error "expected identifier" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy.C
new file mode 100644
index 0000000..6d27d75
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-copy.C
@@ -0,0 +1,13 @@
+// { dg-do run { target c++11 } }
+
+int main() {
+ int i;
+ const char* s;
+ [i, s] () -> void { i; s; } ();
+
+ //[] () -> void { i; } (); // { dg-error: "`i' is not in scope" }
+ //[1] () -> void {} (); // { dg-error: "expected identifier" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C
new file mode 100644
index 0000000..4a63d00
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+
+void f()
+{
+ int i;
+ auto lam = [i]{}; // { dg-message "" }
+ decltype(lam) lam2 = { 1 }; // { dg-error "" "not an aggregate" }
+ decltype(lam) lam3; // { dg-error "" "deleted default ctor" }
+ lam3 = lam; // { dg-error "" "deleted assignment op" }
+}
+
+template <class T>
+void g(T i)
+{
+ auto lam = [i]{}; // { dg-message "" }
+ decltype(lam) lam2 = { 1 }; // { dg-error "" "not an aggregate" }
+ decltype(lam) lam3; // { dg-error "" "deleted default ctor" }
+ lam3 = lam; // { dg-error "" "deleted assignment op" }
+}
+
+int main()
+{
+ f();
+ g(1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctors.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctors.C
new file mode 100644
index 0000000..8dfb2fa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctors.C
@@ -0,0 +1,17 @@
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ A() { }
+ A(A&) { }
+ A(A&&) { }
+};
+
+int main()
+{
+ A a;
+ auto lam4 = [a]{}; // OK, implicit move ctor
+ lam4();
+ auto lam5 = lam4; // OK, implicit copy ctor
+ lam5();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-debug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-debug.C
new file mode 100644
index 0000000..b8b15d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-debug.C
@@ -0,0 +1,16 @@
+// PR c++/43502
+// { dg-do compile { target c++11 } }
+// { dg-options "-fcompare-debug" }
+
+void g (int n)
+{
+ int bef ([]{return 0;}());
+}
+struct S {
+ void f (int = []{return 0;}(), int = [] { return 0;}());
+};
+int main ()
+{
+ S ().f ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype1.C
new file mode 100644
index 0000000..b36ca21
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-decltype1.C
@@ -0,0 +1,22 @@
+// PR c++/59791
+// We force the gimple dump to trigger use of lang_decl_name.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fdump-tree-gimple" }
+// { dg-final { cleanup-tree-dump "gimple" } }
+
+template < class T > void
+f (T t)
+{
+ int i = t;
+ [](int)->decltype (i + t)
+ {
+ return 0;
+ }
+ (0);
+}
+
+void
+foo ()
+{
+ f (0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C
new file mode 100644
index 0000000..88970a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C
@@ -0,0 +1,22 @@
+// Testcase for DR 975.
+
+// { dg-do compile { target c++11 } }
+
+bool b;
+struct A { int fn1(); const int& fn2(); };
+struct B { int fn1(); long fn2(); };
+
+template <class T> int f (T t) {
+ return [](T t){
+ if (b)
+ return t.fn1();
+ else
+ return t.fn2(); // { dg-error "inconsistent types" }
+ }(t);
+}
+
+int main()
+{
+ f(A()); // { dg-bogus "" } int and const int& are compatible
+ f(B()); // { dg-message "from here" } int and long are not
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C
new file mode 100644
index 0000000..fdbb4e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C
@@ -0,0 +1,22 @@
+// Test that this is accepted even when pedantic now that it's part
+// of the standard.
+
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+bool b;
+template <class T>
+T f (T t)
+{
+ [=] { return t+1; }; // OK
+ return [=] {
+ auto i = t+1;
+ return i+1;
+ }();
+}
+
+int main()
+{
+ if (f(1) != 3)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C
new file mode 100644
index 0000000..6ada757
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+int main() {
+ int i = 0;
+ int& r = [&] () { return i; } (); // { dg-error "" "invalid initialization of non-const reference of type .int&. from a temporary of type .int." }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce.C
new file mode 100644
index 0000000..b0e2d9f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce.C
@@ -0,0 +1,28 @@
+// { dg-do run { target c++11 } }
+#include <cassert>
+
+int main() {
+ [] {};
+ [] {} ();
+ [] () {};
+ [] () {} ();
+ [] () { return "lambda"; };
+
+ int i = 1, j = 2;
+ [&i, j] () { i = j; } ();
+ assert(i == 2);
+ assert(j == 2);
+
+ i = [] () { return 3; } ();
+ assert(i == 3);
+
+ int k = [&] () { return i; } ();
+
+ []{ return; };
+
+ int array[] = { 1, 2, 3 };
+ int* p = [&] () { return array; } ();
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C
new file mode 100644
index 0000000..5cf016c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C
@@ -0,0 +1,11 @@
+// PR c++/43875
+// { dg-do compile { target c++11 } }
+
+void f();
+void f(int);
+
+int main()
+{
+ auto x1 = []{ return f; }; // { dg-error "return|overloaded" }
+ auto x2 = []{ return { 1, 2 }; }; // { dg-error "return|list" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg.C
new file mode 100644
index 0000000..cefa24d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ [](int a = 1) { return a; }(); // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C
new file mode 100644
index 0000000..35104c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg2.C
@@ -0,0 +1,7 @@
+// PR c++/43886
+// { dg-do compile { target c++11 } }
+
+void f2() {
+ int i = 1;
+ void g5(int = ([]{ return sizeof i; })());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg3.C
new file mode 100644
index 0000000..1c59393
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg3.C
@@ -0,0 +1,19 @@
+// PR c++/55223
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=0" }
+// { dg-final { scan-assembler "_ZN8functionC1IZN1CIiE4testES_Ed_UliE_EET_" } }
+
+struct function
+{
+ template <class U> function(U u) { }
+};
+
+template<typename T> struct C
+{
+ static T test(function f = [](int i){return i;}) { }
+};
+
+int main()
+{
+ C<int>::test();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C
new file mode 100644
index 0000000..2217954
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C
@@ -0,0 +1,8 @@
+// PR c++/54764
+// { dg-require-effective-target c++11 }
+
+template<class T = void>
+struct c
+{
+ int (*f)(int) = [](int i){return i + i;};
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C
new file mode 100644
index 0000000..d85918d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg5.C
@@ -0,0 +1,30 @@
+// PR c++/58083
+// { dg-do compile { target c++11 } }
+
+namespace details {
+struct iterator_concept_checker
+{
+ typedef char yes_type;
+ typedef char (&no_type)[2];
+
+ template <typename T>
+ static no_type test(...);
+
+ template <typename T>
+ static yes_type test(
+ int*
+ , void (*)(T) = [](T it)
+ {
+ auto copy = T{it}; // copy constructible
+ copy = it; // copy assignable
+ copy.~T(); // destroyable
+ ++it; // incrementable
+ }
+ );
+};
+}
+
+int main()
+{
+ details::iterator_concept_checker::test<int>(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-diag1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-diag1.C
new file mode 100644
index 0000000..dc1043b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-diag1.C
@@ -0,0 +1,8 @@
+// { dg-require-effective-target c++11 }
+
+int main()
+{
+ int x;
+ auto f = [x]{ };
+ f.__x.foo; // { dg-error "<lambda\\(\\)>::<x capture>" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C
new file mode 100644
index 0000000..7cc3f8f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-direct-init.C
@@ -0,0 +1,14 @@
+// Test that capture by copy uses direct-initialization.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+ explicit A(const A&);
+};
+
+int main()
+{
+ A a;
+ [a]{};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh.C
new file mode 100644
index 0000000..7516fe0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh.C
@@ -0,0 +1,35 @@
+// Test that we properly clean up if we get an exception in the middle of
+// constructing the closure object.
+
+// This test fails because of PR 41449; it isn't a lambda issue.
+// { dg-do run { xfail *-*-* } }
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ A() {}
+ A(const A&) { throw 1; }
+};
+
+int bs;
+struct B
+{
+ B() { ++bs; }
+ B(const B&) { ++bs; }
+ ~B() { --bs; }
+};
+
+int main()
+{
+ {
+ B b1, b2;
+ A a;
+
+ try
+ {
+ [b1, a, b2]{ };
+ }
+ catch(...) {}
+ }
+ return bs;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
new file mode 100644
index 0000000..1ef510a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C
@@ -0,0 +1,17 @@
+// PR c++/47263
+// PR c++/49260
+// { dg-options "-fno-asynchronous-unwind-tables -fno-dwarf2-cfi-asm" }
+// { dg-do run { target c++11 } }
+
+#include <exception>
+
+int main( void )
+{
+ std::set_unexpected( []{ throw 0; } );
+ try
+ {
+ []() throw( int ) { throw nullptr; }();
+ }
+ catch( int )
+ { }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
new file mode 100644
index 0000000..10dc6e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
@@ -0,0 +1,14 @@
+// PR c++/56388
+// { dg-require-effective-target c++11 }
+
+int main()
+{
+ bool /*const*/ condition = false;
+
+ [&]{
+ try{}
+ catch(...){
+ if(condition){}
+ }
+ }();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C
new file mode 100644
index 0000000..932ff1b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C
@@ -0,0 +1,8 @@
+// PR c++/51415
+// { dg-do compile { target c++11 } }
+
+void foo()
+{
+ int x[1];
+ [x]{} = 0; // { dg-error "lambda" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err2.C
new file mode 100644
index 0000000..aaa80f4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err2.C
@@ -0,0 +1,12 @@
+// PR c++/53158
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ auto a = []() { return true; };
+ auto b = []() { return a(); }; // { dg-error "'a' is not captured" }
+ int c, d;
+ while (b() && c < d) // { dg-error "could not convert" }
+ {
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err3.C
new file mode 100644
index 0000000..fec01ac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err3.C
@@ -0,0 +1,10 @@
+// PR c++/51412
+// { dg-do compile { target c++11 } }
+
+void foo(int);
+
+template<int> void bar()
+{
+ foo([]{}...); // { dg-error "<lambda>" }
+ foo([]{}=0 ...); // { dg-error "<lambda>" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C
new file mode 100644
index 0000000..3dc7f87
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C
@@ -0,0 +1,18 @@
+// Test that error messages about creating the closure object refer to
+// the lambda-introducer.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+ A(const A& a) = delete; // { dg-message "declared" }
+};
+
+int main()
+{
+ A ar[4][3];
+ [ar] { }; // { dg-error "3:" }
+
+ A a;
+ [a] { }; // { dg-error "3:" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
new file mode 100644
index 0000000..4ddd38c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
@@ -0,0 +1,19 @@
+// PR c++/42399
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A();
+ A(const A&) = delete; // { dg-message "declared" }
+};
+
+template <class T>
+void f()
+{
+ T t;
+ [t] { return 0; }; // { dg-error "use" }
+}
+
+int main()
+{
+ f<A>(); // { dg-message "required" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-field-names.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-field-names.C
new file mode 100644
index 0000000..1c5cfdb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-field-names.C
@@ -0,0 +1,21 @@
+// "For each entity captured by copy, an unnamed non-static data member is
+// declared in the closure type" -- test that there isn't a member of the
+// closure with the same name as the captured variable.
+
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A: public T
+{
+ A(T t): T(t) { }
+ int f() { return this->i; } // { dg-error "" "no member named i" }
+};
+
+int main()
+{
+ int i = 42;
+ auto lam = [i]{ };
+ lam.i = 24; // { dg-error "" "no member named i" }
+ A<decltype(lam)> a(lam);
+ return a.f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
new file mode 100644
index 0000000..0123034
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
@@ -0,0 +1,13 @@
+// PR c++/50114
+// { dg-do compile { target c++11 } }
+// { dg-options "-w" }
+
+int open()
+{
+ int *x2feed_i = 0;
+ auto insert_feed = [&](unsigned char venue, int* newfeed)
+ {
+ for(int x2feed_i = 1; 0; ) ;
+ x2feed_i = newfeed;
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C
new file mode 100644
index 0000000..e4a11ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice1.C
@@ -0,0 +1,13 @@
+// PR c++/43790
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int f();
+};
+
+int main()
+{
+ A a;
+ auto l = [] () { return a.f(); }; // { dg-error "not captured|return" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice10.C
new file mode 100644
index 0000000..1ea59c2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice10.C
@@ -0,0 +1,8 @@
+// PR c++/58568
+// { dg-do compile { target c++11 } }
+
+template<int> struct A
+{
+ static const int i;
+ template<int N> const int A<N>::i = []{ return 0; }(); // { dg-error "invalid use" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C
new file mode 100644
index 0000000..58f0fa3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice11.C
@@ -0,0 +1,12 @@
+// PR c++/60252
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ int i; // { dg-message "" }
+
+ void foo()
+ {
+ [&](){ [&](int[i]){}; }; // { dg-error "" }
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice12.C
new file mode 100644
index 0000000..d18aadf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice12.C
@@ -0,0 +1,15 @@
+// PR c++/54250
+// { dg-do compile { target c++11 } }
+
+struct T
+{
+ int a;
+ int foo()
+ {
+ return [&]()->int {
+ return [&](decltype(/*this->*/a) _)->int {
+ return 1;
+ }(a);
+ }();
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
new file mode 100644
index 0000000..6a31e0a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
@@ -0,0 +1,17 @@
+// PR c++/42083
+// { dg-do compile { target c++11 } }
+
+template<typename F>
+decltype(F()) run(F f) // { dg-message "note" }
+{
+ return f();
+}
+
+int main()
+{
+ auto l = []() { return 5; }; // { dg-message "lambda closure type" }
+
+ run(l); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 14 }
+ // { dg-error "use of deleted function" "candidate explanation" { target *-*-* } 5 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
new file mode 100644
index 0000000..03a7a4b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice3.C
@@ -0,0 +1,23 @@
+// PR c++/47795
+// { dg-do compile { target c++11 } }
+
+class Klass
+{
+ unsigned int local;
+public:
+ bool dostuff();
+};
+
+bool Klass::dostuff()
+{
+ auto f = []() -> bool {
+ if (local & 1) { return true; } // { dg-error "not captured" }
+ return false;
+ };
+}
+
+int main()
+{
+ Klass c;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C
new file mode 100644
index 0000000..8c08e90
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice4.C
@@ -0,0 +1,14 @@
+// PR c++/47242
+// { dg-do compile { target c++11 } }
+
+template < typename > void
+bar ()
+{
+ [i]{}; // { dg-error "declared|invalid" }
+}
+
+void
+foo ()
+{
+ bar<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C
new file mode 100644
index 0000000..914e0f7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C
@@ -0,0 +1,12 @@
+// PR c++/51227
+// { dg-do compile { target c++11 } }
+
+template<int> int foo()
+{
+ [] (void i) { return 0; } (0); // { dg-error "incomplete|invalid|no match" }
+}
+
+void bar()
+{
+ foo<0>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C
new file mode 100644
index 0000000..408af42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C
@@ -0,0 +1,4 @@
+// PR c++/51464
+// { dg-do compile { target c++11 } }
+
+template<int = sizeof([])> struct A {}; // { dg-error "lambda" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C
new file mode 100644
index 0000000..d0ee866
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C
@@ -0,0 +1,9 @@
+// PR c++/52487
+// { dg-do compile { target c++11 } }
+
+struct A; // { dg-error "forward declaration" }
+
+void foo(A& a)
+{
+ [=](){a;}; // { dg-error "invalid use of incomplete type" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice8.C
new file mode 100644
index 0000000..00078d5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice8.C
@@ -0,0 +1,10 @@
+// PR c++/51422
+// { dg-do compile { target c++11 } }
+
+template<typename> struct A {};
+
+void foo()
+{
+ [i] { A<decltype(i)>(); }; // { dg-error "not declared|invalid" }
+ [i] { A<decltype(i)>(); }; // { dg-error "invalid" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice9.C
new file mode 100644
index 0000000..0a88bc8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice9.C
@@ -0,0 +1,18 @@
+// PR c++/53741
+// { dg-do compile { target c++11 } }
+
+struct X
+{
+ template <class T> static void bar() {}
+
+ template <class T> void foo(T p)
+ {
+ [&] { bar<T>(); };
+ }
+};
+
+int main()
+{
+ X x;
+ x.foo(3);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C
new file mode 100644
index 0000000..92a165d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C
@@ -0,0 +1,35 @@
+// { dg-do compile { target c++11 } }
+
+#include <cassert>
+
+class C {
+ private:
+ int m_i;
+
+ public:
+ C() : m_i(-1) {
+ [] { this; } (); // { dg-error "not captured" }
+ [this] () -> void { m_i = 0; } ();
+ assert(m_i == 0);
+ [this] () -> void { this->m_i = 1; } ();
+ assert(m_i == 1);
+ [&] () -> void { m_i = 2; } ();
+ assert(m_i == 2);
+ [&] () -> void { this->m_i = 3; } ();
+ assert(m_i == 3);
+ [=] () -> void { m_i = 4; } (); // copies 'this' or --copies-m_i--?
+ assert(m_i == 4);
+ [=] () -> void { this->m_i = 5; } ();
+ assert(m_i == 5);
+ }
+
+};
+
+int main() {
+ C c;
+
+ [this] () -> void {} (); // { dg-error "use of 'this' in non-member function" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C
new file mode 100644
index 0000000..9298110
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C
@@ -0,0 +1,35 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+class C {
+ private:
+ int m_i;
+
+ public:
+ C() : m_i(-1) {
+ //[] { this; } ();
+ [this] () -> void { m_i = 0; } ();
+ assert(m_i == 0);
+ [this] () -> void { this->m_i = 1; } ();
+ assert(m_i == 1);
+ [&] () -> void { m_i = 2; } ();
+ assert(m_i == 2);
+ [&] () -> void { this->m_i = 3; } ();
+ assert(m_i == 3);
+ [=] () -> void { m_i = 4; } (); // copies 'this' or --copies-m_i--?
+ assert(m_i == 4);
+ [=] () -> void { this->m_i = 5; } ();
+ assert(m_i == 5);
+ }
+
+};
+
+int main() {
+ C c;
+
+ //[this] () -> void {} (); // { dg-error: "cannot capture `this' outside of class method" }
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C
new file mode 100644
index 0000000..029576e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C
@@ -0,0 +1,12 @@
+// PR c++/50863
+// { dg-do compile { target c++11 } }
+
+struct T {
+ template<typename F>
+ T(F) { }
+};
+
+int main()
+{
+ T t{ []{ } };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C
new file mode 100644
index 0000000..3c25f0e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C
@@ -0,0 +1,27 @@
+// PR c++/54947
+// { dg-do compile { target c++11 } }
+
+struct X
+{
+ template<typename L>
+ X(L)
+ { }
+};
+
+template<typename A>
+ void
+ test()
+ {
+ int i = 0;
+
+ A a_ok_1( [=] { return i; } ); // OK
+ A a_ok_2( [i] { return i; } ); // OK
+
+ A a_err_1{ [i] { return i; } }; // error
+ A a_err_2{ [=] { return i; } }; // error
+ }
+
+int main()
+{
+ test<X>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist3.C
new file mode 100644
index 0000000..f7b82ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist3.C
@@ -0,0 +1,11 @@
+// PR c++/56567
+// { dg-require-effective-target c++11 }
+
+#include <initializer_list>
+
+int main()
+{
+ []{ return { 1, 2 }; }(); // { dg-error "initializer.list" }
+}
+
+// { dg-prune-output "return-statement with a value" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-intname.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-intname.C
new file mode 100644
index 0000000..4c268c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-intname.C
@@ -0,0 +1,6 @@
+// PR c++/54420
+
+class __lambda
+{
+ virtual bool is_sub ();
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-lookup-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-lookup-neg.C
new file mode 100644
index 0000000..a952526
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-lookup-neg.C
@@ -0,0 +1,7 @@
+// Test that we don't crash on a failed lookup.
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ [i]{}; // { dg-error "not declared" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
new file mode 100644
index 0000000..220817a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
@@ -0,0 +1,104 @@
+// Test lambda mangling
+// { dg-require-weak "" }
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-inline" }
+
+template<typename F> int algo(F fn) { return fn(); }
+inline void g(int n) {
+ int bef(int i = []{ return 1; }());
+ // Default arguments of block-extern function declarations
+ // remain in the context of the encloding function body.
+ // The closure type is encoded as Z1giEUlvE_.
+ // The call operator of that type is _ZZ1giENKUlvE_clEv.
+
+// { dg-final { scan-assembler "_ZZ1giENKUlvE_clEv" } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZZ1giENKUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
+
+ algo([=]{return n+bef();});
+ // The captured entities do not participate in <lambda-sig>
+ // and so this closure type has the same <lambda-sig> as
+ // the previous one. It encoding is therefore Z1giEUlvE0_
+ // and the call operator is _ZZ1giENKUlvE0_clEv. The
+ // instance of "algo" being called is then
+ // _Z4algoIZ1giEUlvE0_EiT_.
+
+// { dg-final { scan-assembler "_Z4algoIZ1giEUlvE0_EiT_" } }
+// { dg-final { scan-assembler "_ZZ1giENKUlvE0_clEv" } }
+
+ int i = []{return 1;}();
+
+}
+
+struct S {
+ void f(int =
+ // Type: ZN1S1fEiiEd0_UlvE_
+ // Operator: _ZZN1S1fEiiEd0_NKUlvE_clEv
+// { dg-final { scan-assembler "_ZZN1S1fEiiEd0_NKUlvE_clEv" } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZZN1S1fEiiEd0_NKUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
+ []{return 1;}()
+ // Type: ZN1S1fEiiEd0_UlvE0_
+ // Operator: _ZZN1S1fEiiEd0_NKUlvE0_clEv
+// { dg-final { scan-assembler "_ZZN1S1fEiiEd0_NKUlvE0_clEv" } }
+ + []{return 2;}(),
+ int =
+ // Type: ZN1S1fEiiEd_UlvE_
+ // Operator: _ZZN1S1fEiiEd_NKUlvE_clEv
+// { dg-final { scan-assembler "_ZZN1S1fEiiEd_NKUlvE_clEv" } }
+ []{return 3;}());
+};
+
+template<typename T> struct R {
+ static int x;
+};
+template<typename T> int R<T>::x = []{return 1;}();
+template int R<int>::x;
+// Type of lambda in intializer of R<int>::x: N1RIiE1xMUlvE_E
+// Corresponding operator(): _ZNK1RIiE1xMUlvE_clEv
+// { dg-final { scan-assembler "_ZNK1RIiE1xMUlvE_clEv" } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZNK1RIiE1xMUlvE_clEv" { target { ! { *-*-mingw* *-*-cygwin } } } } }
+
+void bar()
+{
+ // lambdas in non-vague linkage functions have internal linkage.
+ // { dg-final { scan-assembler-not "weak\[^\n\r\]*bar\[^\n\r\]*Ul" } }
+ []{}();
+}
+
+// lambdas used in non-template, non-class body initializers are internal.
+// { dg-final { scan-assembler-not "weak\[^\n\r\]*_ZNKUlv" } }
+// { dg-final { scan-assembler-not "weak\[^\n\r\]*variable" } }
+int variable = []{return 1;}();
+
+// And a template instantiated with such a lambda is also internal.
+// { dg-final { scan-assembler-not "weak\[^\n\r\]*algoIUl" } }
+int var2 = algo([]{return 1;});
+
+// As are lambdas used in non-class-body default arguments.
+// { dg-final { scan-assembler-not "weak\[^\n\r\]*function" } }
+void function (int i = []{return 1;}()+[]{return 1;}());
+
+struct Foo
+{
+ static int Int;
+ void Bar(int);
+};
+
+int Foo::Int = []{return 1;}();
+// Even default arguments for member functions that appear outside the
+// class body are internal.
+// { dg-final { scan-assembler-not "weak\[^\n\r\]*Foo" } }
+void Foo::Bar(int i = []{return 1;}()) {}
+
+// Even default arguments for function templates.
+// { dg-final { scan-assembler-not "weak\[^\n\r\]*fn2\[^\n\r\]*Ulv" } }
+template <class T>
+void fn2 (T t = []{return 1;}()) {}
+
+int main()
+{
+ g(42);
+ S().f();
+ function();
+ Foo().Bar();
+ fn2<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle2.C
new file mode 100644
index 0000000..54309a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle2.C
@@ -0,0 +1,20 @@
+// PR c++/49276
+// { dg-do compile { target c++11 } }
+
+template <int N>
+struct F
+{
+ template <typename U> F (U);
+};
+
+struct S
+{
+ void foo (F <0> x = [] {}) {}
+};
+
+int
+main ()
+{
+ S s;
+ s.foo ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C
new file mode 100644
index 0000000..5f17a21
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C
@@ -0,0 +1,15 @@
+// PR c++/51818
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1AC1IN3foo3barMUlvE_EEET_" } }
+
+struct A
+{
+ template <class T> A(T) { }
+};
+
+struct foo
+{
+ A bar = []{};
+};
+
+foo f;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle4.C
new file mode 100644
index 0000000..0d37637
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle4.C
@@ -0,0 +1,13 @@
+// PR c++/54538
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A
+{
+ // { dg-final { scan-assembler "_ZNK1AIcE1pMUlvE_cvPFvvEEv" } }
+ // { dg-final { scan-assembler "_ZNK1AIiE1pMUlvE_cvPFvvEEv" } }
+ void (*p)() = []{};
+};
+
+A<int> a1;
+A<char> a2;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mixed.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mixed.C
new file mode 100644
index 0000000..d3f4341
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mixed.C
@@ -0,0 +1,12 @@
+// { dg-do run { target c++11 } }
+#include <cassert>
+
+int main() {
+ int i = 1, j = 2;
+ [&i, j] () mutable -> void { i = 0; j = 0; } ();
+ assert(i == 0);
+ assert(j == 2);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable.C
new file mode 100644
index 0000000..2c6b0f2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable.C
@@ -0,0 +1,15 @@
+// { dg-do run { target c++11 } }
+#include <cassert>
+
+int main() {
+ int i = 1;
+ const char* s1 = "hello";
+ const char* s2 = s1;
+ [i, s2] () mutable -> void { i = 2; s2 = "world"; } ();
+ //[i, s2] () -> void { i = 2; s2 = "world"; } (); // { dg-error: "assignment of data-member in read-only structure" }
+ assert(i == 1);
+ assert(s1 == s2);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C
new file mode 100644
index 0000000..c54ff5c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C
@@ -0,0 +1,23 @@
+// PR c++/55532
+// { dg-do compile { target c++11 } }
+
+struct Foo {
+ void doit() {
+ }
+};
+
+template<typename T>
+void oops(Foo &foo, const T &) {
+ auto fun = [&] () mutable {
+ foo.doit();
+ };
+ auto fun2 = [=]() {
+ fun(); // { dg-error "" }
+ };
+ fun2();
+}
+
+int main() {
+ Foo foo;
+ oops(foo, 1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C
new file mode 100644
index 0000000..a09af89
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C
@@ -0,0 +1,10 @@
+// PR c++/56710
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall" }
+
+int main()
+{
+ int t = 0;
+ return [&]() -> int {int __t; __t = t; return __t; }();
+ return [&t]() -> int {int __t; __t = t; return __t; }();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C
new file mode 100644
index 0000000..c8ea46a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C
@@ -0,0 +1,62 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+struct A {
+ int i;
+ A(): i(42) { }
+ int f() {
+ return [this]{
+ return [=]{ return i; }();
+ }();
+ }
+};
+
+int main() {
+ int i = 1;
+
+ [] (int& i) -> void {
+ [&] () -> void {
+ i = 2;
+ } ();
+ } (i);
+
+ assert(i == 2);
+
+ [&] () -> void {
+ [&i] () -> void {
+ i = 3;
+ } ();
+ } ();
+
+ assert(i == 3);
+
+ [&] () -> void {
+ [&] () -> void {
+ i = 4;
+ } ();
+ } ();
+
+ assert(i == 4);
+ i = 4;
+
+ [&] () -> void {
+ [=] () mutable -> void {
+ i = 5;
+ } ();
+ } ();
+
+ assert(i == 4);
+
+ [=] () mutable -> void {
+ [&] () -> void {
+ i = 6;
+ } ();
+ } ();
+
+ assert(i == 4);
+
+ assert (A().f() == 42);
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C
new file mode 100644
index 0000000..9e50951
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C
@@ -0,0 +1,31 @@
+// Testcase from N2998
+// { dg-do compile { target c++11 } }
+
+void f1(int i) {
+ int const N = 20;
+ auto m1 = [=]{
+ int const M = 30;
+ auto m2 = [i]{
+ int x[N][M]; // OK: N and M are not "used"
+ x[0][0] = i; // OK: i is explicitly captured by m2
+ // and implicitly captured by m1
+ };
+ };
+ struct s1 {
+ int f;
+ int work(int n) {
+ int m = n*n;
+ int j = 40;
+ auto m3 = [this,m]{
+ /*auto m4=*/[&,j]{ // { dg-error "j. is not captured" }
+ int x = n; // { dg-error "n. is not captured" }
+ x += m; // OK: m implicitly captured by m4
+ // and explicitly captured by m3
+ x += i; // { dg-error "i. is not captured" }
+ x += f; // OK: this captured implicitly by m4
+ // and explicitly by m3
+ };
+ };
+ }
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C
new file mode 100644
index 0000000..f7894fb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested3.C
@@ -0,0 +1,12 @@
+// PR c++/41896
+// { dg-do compile { target c++11 } }
+
+void nested_lambda()
+{
+ float val;
+
+ [val]()
+ {
+ [val](){};
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C
new file mode 100644
index 0000000..140ed30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C
@@ -0,0 +1,9 @@
+// PR c++/47687
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A { };
+
+auto inl = []{ return []{}; }();
+typedef decltype(inl) inlt;
+
+A<inlt> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-non-const.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-non-const.C
new file mode 100644
index 0000000..b5a335e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-non-const.C
@@ -0,0 +1,18 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+template<typename F>
+void call(F f) { f(); }
+
+int main() {
+ call([] () -> void {});
+ call([] () mutable -> void {});
+
+ int i = -1;
+ call([i] () mutable -> void { i = 0; });
+ assert(i == -1);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nop.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nop.C
new file mode 100644
index 0000000..4a04cfb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nop.C
@@ -0,0 +1,18 @@
+// { dg-do run { target c++11 } }
+#include <cassert>
+
+int main() {
+ int i = 1, j = 2;
+ [i, j] () -> void {} ();
+ assert(i == 1);
+ assert(j == 2);
+ [&i, &j] () -> void {} ();
+ assert(i == 1);
+ assert(j == 2);
+ [] (int x) -> void {} (1);
+ [] (int& x) -> void {} (i);
+ [] (int x, int y) -> void {} (i, j);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ns-scope.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ns-scope.C
new file mode 100644
index 0000000..4729bb3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ns-scope.C
@@ -0,0 +1,17 @@
+// { dg-do run { target c++11 } }
+
+auto f = [](int i) { return i+1; };
+
+int g(int i = [] { return 237; }())
+{
+ return i;
+}
+
+int main()
+{
+ if (f(41) != 42)
+ return 1;
+ if (g() != 237)
+ return 2;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C
new file mode 100644
index 0000000..94dc254
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C
@@ -0,0 +1,10 @@
+// PR c++/56464
+// { dg-do run { target c++11 } }
+
+struct bug { bug*a = [&]{ return [=]{return this;}(); }(); };
+int main()
+{
+ bug b;
+ if (b.a != &b)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi2.C
new file mode 100644
index 0000000..73106d7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi2.C
@@ -0,0 +1,4 @@
+// PR c++/56565
+// { dg-do compile { target c++11 } }
+
+struct bug { int a; int *b = [&]{ return &a; }(); };
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C
new file mode 100644
index 0000000..da7e0bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C
@@ -0,0 +1,9 @@
+// PR c++/55972
+// { dg-do compile { target c++11 } }
+
+class C
+{
+ void f();
+ int j = 10;
+ int i = [this]() { return this->j; }();
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C
new file mode 100644
index 0000000..b592f15
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C
@@ -0,0 +1,14 @@
+// PR c++/51927
+// { dg-do compile { target c++11 } }
+
+struct function
+{
+ template<typename Functor>
+ function(Functor);
+};
+
+struct testee
+{
+ function l1 = []() { };
+ function l2 = [=]() { l1; };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
new file mode 100644
index 0000000..1d2778f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
@@ -0,0 +1,7 @@
+// PR c++/58596
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i = [] { return decltype(i)(); }();
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C
new file mode 100644
index 0000000..1aadbb4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C
@@ -0,0 +1,47 @@
+// PR c++/54170
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+struct A;
+typedef A* ptr;
+typedef int (A::*pmf) (int);
+typedef int (A::*pdm);
+
+int total;
+
+void add(int n)
+{
+ total += n;
+}
+
+template <typename RType, typename Callable>
+RType Call(Callable native_func, int arg)
+{
+ return native_func(arg);
+}
+
+template <typename RType>
+RType do_test(int delta)
+{
+ return Call<RType>([=](int delta) { add(delta); return nullptr; }, delta);
+}
+
+template <typename RType>
+void test()
+{
+ total = 0;
+ assert (!do_test<RType>(5));
+ assert (total == 5);
+ assert (!do_test<RType>(20));
+ assert (total == 25);
+ assert (!do_test<RType>(-256));
+ assert (total == -231);
+}
+
+int main()
+{
+ test<ptr>();
+ test<pdm>();
+ test<pmf>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-pass.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-pass.C
new file mode 100644
index 0000000..d904ebe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-pass.C
@@ -0,0 +1,26 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+#include <algorithm>
+
+template <typename F, typename A1>
+void call(F f, const A1& arg1) {
+ f(arg1);
+}
+
+int main() {
+ int i = 1;
+ call(
+ [&i] (int j) -> void { i = j; },
+ 2
+ );
+ assert(i == 2);
+
+ int A[] = {1, 2, 3, 4};
+ int sum = 0;
+ std::for_each(A, A+4, [&sum] (int n) -> void { sum += n; });
+ assert(sum == 10);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C
new file mode 100644
index 0000000..40b539a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-qualified.C
@@ -0,0 +1,17 @@
+// PR c++/50089
+// { dg-do compile { target c++11 } }
+
+struct TestBase
+{
+ void foo() {}
+};
+
+struct Test : TestBase
+{
+ void foo()
+ {
+ [this]{
+ /*this->*/TestBase::foo(); // ICE without this->
+ }();
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-recursive.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-recursive.C
new file mode 100644
index 0000000..cbaeb16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-recursive.C
@@ -0,0 +1,20 @@
+// { dg-do run { target c++11 } }
+
+//#include <iostream>
+#include <functional>
+#include <cassert>
+
+int main() {
+
+ std::function<int(int)> fib = [&fib] (int n) -> int {
+ //std::cerr << "fib(" << n << ")\n";
+ if (n <= 2) return 1;
+ else return fib(n-1) + fib(n-2);
+ };
+
+ assert(fib(5) == 5);
+ assert(fib(10) == 55);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref-default.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref-default.C
new file mode 100644
index 0000000..6b86369
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref-default.C
@@ -0,0 +1,14 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+int main() {
+ int i = 1;
+ float j = 2.0;
+ [&] () -> void { i = 3; j = 4.0; } ();
+ assert(i == 3);
+ assert(j == 4.0);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref.C
new file mode 100644
index 0000000..def13fd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref.C
@@ -0,0 +1,14 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+
+int main() {
+ int i = 1;
+ float j = 2.0;
+ [&i, &j] () -> void { i = 3; j = 4.0; } ();
+ assert(i == 3);
+ assert(j == 4.0);
+
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref2.C
new file mode 100644
index 0000000..49705f5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ref2.C
@@ -0,0 +1,12 @@
+// PR c++/49598
+// { dg-do run { target c++11 } }
+
+int
+main()
+{
+ int i = 10;
+ int& ir = i;
+
+ if ([=]{ return ir; }() != 10)
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C
new file mode 100644
index 0000000..4b353b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C
@@ -0,0 +1,26 @@
+// PR c++/57437
+// { dg-require-effective-target c++11 }
+
+struct A {
+ int i;
+
+ A(): i(42) {}
+ A(const A&) = default;
+ A(A&& a): i(a.i) { a.i = 0; }
+};
+
+int main()
+{
+ A x;
+
+ auto y = [x] () mutable {
+ x.i++;
+ return x;
+ };
+
+ if (y().i != 43)
+ __builtin_abort ();
+
+ if (y().i != 44)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C
new file mode 100644
index 0000000..973f8a7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C
@@ -0,0 +1,55 @@
+// PR c++/56039
+// { dg-do compile { target c++11 } }
+
+template <bool> struct BoolSink { typedef void type; };
+
+template <typename T, typename U>
+struct AddRvalueReferenceImpl { typedef T type; };
+
+template <typename T>
+struct AddRvalueReferenceImpl<T, typename BoolSink<false &&
+ [] {
+ extern T &&tref;
+ }>::type> { // { dg-error "lambda" }
+ typedef T &&type;
+};
+
+template <typename T>
+struct AddRvalueReference : AddRvalueReferenceImpl<T, void> { };
+
+namespace ImplHelpers {
+ template <typename T>
+ typename AddRvalueReference<T>::type create(void) { }
+}
+
+template <typename T, typename U, typename ...Args>
+struct IsConstructibleImpl { enum { value = 0 }; };
+
+template <typename T, typename ...Args>
+struct IsConstructibleImpl<T, typename BoolSink<false &&
+ [] {
+ T t( ::ImplHelpers::create<Args>() ...);
+ }>::type, Args ...> { // { dg-error "lambda" }
+ enum { value = 1 };
+};
+
+template <typename T, typename ...Args>
+struct IsConstructible : IsConstructibleImpl<T, void, Args ...> { };
+
+struct DestroyMe {
+ ~DestroyMe() = delete;
+};
+
+static_assert(+IsConstructible<int>::value, "error");
+static_assert(!IsConstructible<void>::value, "error");
+static_assert(+IsConstructible<int [1]>::value, "error");
+static_assert(!IsConstructible<DestroyMe>::value, "error");
+static_assert(!IsConstructible<int *, char *>::value, "error");
+
+static_assert(+IsConstructible<int &&, int>::value, "error");
+static_assert(!IsConstructible<int &&, int &>::value, "error");
+static_assert(+IsConstructible<int &&, int &&>::value, "error");
+
+// { dg-prune-output "expected" }
+// { dg-prune-output "does not name a class" }
+// { dg-prune-output "static assertion" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C
new file mode 100644
index 0000000..fcfc39e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow1.C
@@ -0,0 +1,10 @@
+// PR c++/55357
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wshadow" }
+
+int main() {
+ int x = 1; // { dg-message "shadowed" }
+ auto const lambda = [](int x) { // { dg-warning "shadows" }
+ return x;
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow2.C
new file mode 100644
index 0000000..6c042ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-shadow2.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wshadow" }
+
+struct A
+{
+ int i;
+ void f()
+ {
+ [=]{ int i; }; // { dg-warning "shadows" }
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C
new file mode 100644
index 0000000..a410384
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-std-function.C
@@ -0,0 +1,21 @@
+// Test using std::function wrapper.
+// { dg-do run { target c++11 } }
+
+#include <functional>
+
+typedef std::function<int()> FN;
+
+template<typename T>
+FN f(T fn)
+{
+ return [fn]{return fn(2);};
+}
+
+int main()
+{
+ auto fn = f([](int i){return i*21;});
+
+ if (fn() != 42)
+ return 1;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
new file mode 100644
index 0000000..1cac211
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
@@ -0,0 +1,26 @@
+// PR c++/49867
+// { dg-do compile { target c++11 } }
+
+int
+main ()
+{
+ void (*l)();
+ while (true)
+ {
+ switch (3)
+ {
+ struct A {
+ void f()
+ {
+ case 4: // { dg-error "case" }
+ break; // { dg-error "break" }
+ }
+ };
+ l = []()
+ {
+ case 3: // { dg-error "case" }
+ break; // { dg-error "break" }
+ };
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C
new file mode 100644
index 0000000..cb3ca94
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C
@@ -0,0 +1,5 @@
+// PR c++/46124
+// { dg-do compile { target c++11 } }
+
+void foo() { [] () -> void (); } // { dg-error "returning a function" "returning" }
+// { dg-error "expected .\{" "expected" { target *-*-* } 4 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C
new file mode 100644
index 0000000..66cc7a4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C
@@ -0,0 +1,40 @@
+// { dg-do run { target c++11 } }
+
+extern "C" void abort();
+
+template <class T>
+auto apply (T t) -> decltype (t())
+{
+ return t();
+}
+
+template <class T>
+T f(T t)
+{
+ T t2 = t;
+ if (t != [=]()->T { return t; }())
+ abort ();
+ if (t != [=] { return t; }())
+ abort ();
+ if (t != [=] { return t2; }())
+ abort ();
+ if (t != [&] { return t; }())
+ abort ();
+ if (t != apply([=]{return t;}))
+ abort ();
+
+ int i;
+ [&] (int a) { return a+i+t; } (0);
+ [&] (int a) -> decltype(a) { return a+i+t; } (0);
+ [&] (int a) -> decltype(i) { return a+i+t; } (0);
+ [&] (int a) -> decltype(t) { return a+i+t; } (0);
+ [&] (int a) -> decltype(a+i) { return a+i+t; } (0);
+ [&] (int a) -> decltype(a+t) { return a+i+t; } (0);
+ [&] (int a) -> decltype(i+t) { return a+i+t; } (0);
+ [&] (int a) -> decltype(a+i+t) { return a+i+t; } (0);
+}
+
+int main()
+{
+ f(0xbeef);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template10.C
new file mode 100644
index 0000000..4fcc965
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template10.C
@@ -0,0 +1,23 @@
+// PR c++/50276
+// { dg-options "-Wuninitialized" }
+// { dg-do run { target c++11 } }
+
+template<typename T>
+unsigned testfun(const T& func)
+{
+ return func();
+}
+
+template<int i>
+unsigned test()
+{
+ if (unsigned value = testfun( [] () { return 0; }))
+ return value;
+ return i;
+}
+
+int main()
+{
+ if (test<42>() != 42)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template11.C
new file mode 100644
index 0000000..520b804
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template11.C
@@ -0,0 +1,25 @@
+// PR c++/56915
+// { dg-require-effective-target c++11 }
+
+template <typename T>
+class A
+{
+ typename T::type b(); // { dg-error "int" }
+};
+
+template <typename T, typename U>
+void waldo(T, U) {}
+
+template <typename T>
+void bar()
+{
+ waldo([](A<T> a){ return a; },
+ []{});
+}
+
+int main()
+{
+ bar<int>();
+}
+
+// { dg-prune-output "used but never defined" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template12.C
new file mode 100644
index 0000000..635af97
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template12.C
@@ -0,0 +1,19 @@
+// PR c++/57568
+// { dg-require-effective-target c++11 }
+
+template < class T >
+struct remove_reference
+{ typedef int type; };
+template < class T >
+class X
+{
+ enum Q { };
+ bool f ()
+ {
+ Q a;
+ [&a]{
+ typename remove_reference < decltype (a) >::type t;
+ };
+ }
+};
+template class X< int >;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template2.C
new file mode 100644
index 0000000..29f63af
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template2.C
@@ -0,0 +1,20 @@
+// PR c++/47049
+// { dg-do compile { target c++11 } }
+
+enum { E = 0, F = 1 };
+template <int N, int M = ((N == 1) ? F : E)> class S {};
+template <int N>
+struct T
+{
+ static void
+ foo (S<N> *p)
+ {
+ S<N> u;
+ [&u] ()->bool {} ();
+ }
+};
+
+int main()
+{
+ T<0>().foo(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C
new file mode 100644
index 0000000..dea9e0e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C
@@ -0,0 +1,33 @@
+// PR c++/49554
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+ struct base
+ {
+ struct iterator { };
+
+ iterator begin();
+ };
+
+template<typename T>
+class flist : public base<T>
+{
+ typedef base<T> Base;
+
+ typedef typename Base::iterator Base_iterator;
+public:
+
+ void
+ resize()
+ {
+ Base_iterator b = Base::begin();
+
+ [b](int i) { return i; };
+ }
+};
+
+void test01()
+{
+ flist<int> fl;
+ fl.resize();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C
new file mode 100644
index 0000000..a65727a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C
@@ -0,0 +1,42 @@
+// PR c++/51459
+// { dg-do run { target c++11 } }
+
+struct func {
+ virtual ~func() { }
+ virtual void operator()() const = 0;
+ virtual func* clone() const = 0;
+};
+
+template<typename T>
+struct funcimpl : func {
+ explicit funcimpl(T t) : t(t) { }
+ void operator()() const { t(); }
+ func* clone() const { return new funcimpl(*this); }
+ T t;
+};
+
+struct function
+{
+ func* p;
+
+ template<typename T>
+ function(T t) : p(new funcimpl<T>(t)) { }
+
+ ~function() { delete p; }
+
+ function(const function& f) : p(f.p->clone()) { }
+
+ function& operator=(const function& ) = delete;
+
+ void operator()() const { (*p)(); }
+};
+
+template <typename F>
+function animate(F f) { return [=]{ f(); }; }
+
+int main()
+{
+ function linear1 = []{};
+ function av(animate(linear1));
+ av();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C
new file mode 100644
index 0000000..b91b89f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C
@@ -0,0 +1,17 @@
+// PR c++/53137
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template <typename T> void f();
+
+ template <typename T> void g()
+ {
+ [this]{ f<T>(); }();
+ }
+
+ void h()
+ {
+ g<int>();
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C
new file mode 100644
index 0000000..5e85619
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C
@@ -0,0 +1,14 @@
+// PR c++/53821
+// { dg-final { scan-assembler-not "_ZZ1fIvEvvENKUlvE_cvPFvvEEv" } }
+// { dg-do compile { target c++11 } }
+
+template <class T> void f()
+{
+ auto g = []{};
+ g();
+}
+
+int main()
+{
+ f<void>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template7.C
new file mode 100644
index 0000000..5b098d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template7.C
@@ -0,0 +1,5 @@
+// PR c++/53783
+// { dg-do compile { target c++11 } }
+
+template <class T> void foo() { [] { [] {}; }; }
+int main() { foo<void>(); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template8.C
new file mode 100644
index 0000000..720941d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template8.C
@@ -0,0 +1,7 @@
+// PR c++/55680
+// { dg-do compile { target c++11 } }
+
+template <class T> struct X {
+ static void (* code ) ();
+};
+template <> void (* X<int>::code ) () = [](){};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C
new file mode 100644
index 0000000..c1d010b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C
@@ -0,0 +1,15 @@
+// PR c++/54276
+// { dg-do link { target c++11 } }
+
+template <typename T>
+void foo(T)
+{
+ static int x = 1;
+ auto f = [] { return x + 1; };
+ f();
+}
+
+int main()
+{
+ foo(4);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C
new file mode 100644
index 0000000..b32f8d7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C
@@ -0,0 +1,13 @@
+// Test that implicit 'this' capture works, but that it's still an rvalue.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ void f()
+ {
+ [=] { i = 0; };
+ [&] { i = 0; };
+ [=] { this = 0; }; // { dg-error "lvalue" }
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this10.C
new file mode 100644
index 0000000..b4b8e72
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this10.C
@@ -0,0 +1,4 @@
+// PR c++/54383
+// { dg-do compile { target c++11 } }
+
+auto foo = [&](int a) { return a > this->b; }; // { dg-error "this" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this11.C
new file mode 100644
index 0000000..2618295
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this11.C
@@ -0,0 +1,22 @@
+// PR c++/51494, c++/56222
+// Uses of static members and creating pointers to members aren't odr-uses
+// of 'this'.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ static void f() {}
+ static int i;
+ int j;
+ void f(int);
+
+ void foo()
+ {
+ [] () {
+ ++i;
+ f();
+ &A::j;
+ (void(*)())&A::f;
+ };
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this12.C
new file mode 100644
index 0000000..ef573b1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this12.C
@@ -0,0 +1,13 @@
+// Uses of 'this' in unevaluated context are not odr-uses.
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int f() {}
+ int i;
+
+ void foo()
+ {
+ [] () { sizeof(i); sizeof(f()); };
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C
new file mode 100644
index 0000000..090d0a1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C
@@ -0,0 +1,20 @@
+// PR c++/52374
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ int get() const { return 42; }
+};
+
+template<typename X>
+struct D
+ : public X
+{
+ int get() const { return [this]() -> int { return X::get(); }(); }
+};
+
+int main()
+{
+ D<B> d;
+ d.get();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C
new file mode 100644
index 0000000..9834bfd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C
@@ -0,0 +1,49 @@
+// PR c++/52014
+// { dg-require-effective-target c++11 }
+
+template <class Iterator, class Func>
+void for_each(const Iterator first, const Iterator last, Func func)
+{
+ for (Iterator it = first; it != last; ++it) {
+ func(*it);
+ }
+}
+
+template <class T>
+struct helper
+{
+ typedef typename T::size_type type;
+};
+
+template <class T>
+struct helper<T&>
+{
+ typedef typename T::size_type type;
+};
+
+template <class T>
+struct helper<T*>
+{
+ typedef typename T::size_type type;
+};
+
+struct bar
+{
+ struct foo
+ {
+ typedef int size_type;
+ } foo_;
+
+ void test()
+ {
+ int arr[] = { 1, 2, 3 };
+ for_each(arr, arr + 3, [&](helper<foo>::type i) {
+ for_each(arr, arr + 3, [&](helper<decltype(foo_)>::type j) { });
+ });
+ }
+};
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C
new file mode 100644
index 0000000..d44bec9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C
@@ -0,0 +1,12 @@
+// PR c++/56692
+// { dg-require-effective-target c++11 }
+
+struct Class {
+ void f () { }
+ static void f (int) { }
+};
+
+int main ()
+{
+ []{ Class::f(0); };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C
new file mode 100644
index 0000000..736d5f5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C
@@ -0,0 +1,28 @@
+// PR c++/56699
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ int a;
+};
+
+struct T
+{
+ int x;
+
+ T() : x([]{
+ sizeof(::A::a);
+ return 0;
+ }())
+ {}
+};
+
+struct B
+{
+ int a;
+};
+
+void f()
+{
+ []{sizeof(B::a);};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C
new file mode 100644
index 0000000..2386e6b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C
@@ -0,0 +1,21 @@
+// PR c++/58481
+// { dg-require-effective-target c++11 }
+
+struct Test {
+ template<typename... Args> inline void triggerTest (Args&&... fargs) { }
+};
+
+struct TestPickled : Test {
+ template<typename... Args> void triggerTest (Args&&... fargs) {
+ [=](Args... as) {
+ Test::triggerTest (as...);
+ } ();
+ }
+};
+
+int main()
+{
+ TestPickled test;
+ test.triggerTest ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C
new file mode 100644
index 0000000..5029a4a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C
@@ -0,0 +1,17 @@
+// PR c++/43856
+// Test for implicit 'this' capture via rewriting.
+// { dg-do compile { target c++11 } }
+
+struct S1 {
+ int operator()(int);
+ int i;
+ void g();
+ void f() {
+ [=]() {
+ i;
+ g();
+ S1::g();
+ operator()(42);
+ };
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this3.C
new file mode 100644
index 0000000..2defa99
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this3.C
@@ -0,0 +1,14 @@
+// PR c++/45520
+// { dg-do compile { target c++11 } }
+
+struct M {
+ int i;
+};
+
+struct S {
+ M m;
+
+ void f() {
+ auto lambda=[&](decltype(m.i) & i) { };
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C
new file mode 100644
index 0000000..f14a272
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C
@@ -0,0 +1,13 @@
+// PR c++/48523
+// { dg-do compile { target c++11 } }
+
+template<typename>
+struct X
+{
+ bool b;
+
+ void f()
+ {
+ [this]{ return b; };
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this5.C
new file mode 100644
index 0000000..8974641
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this5.C
@@ -0,0 +1,22 @@
+// PR c++/53619
+// { dg-do run { target c++11 } }
+
+struct C {
+ int x;
+};
+struct B {
+ int q;
+};
+struct A : public B , C {
+ void foo();
+};
+
+void A::foo() {
+ auto k = [this]() {return (void *)(&x);};
+ if (k() != (void*)&x)
+ __builtin_abort();
+}
+
+int main(int l, char **) {
+ A a; a.foo();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C
new file mode 100644
index 0000000..8c35126
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C
@@ -0,0 +1,32 @@
+// PR c++/53137
+// { dg-do compile { target c++11 } }
+
+template <typename STORE>
+void getParent(STORE& tStore)
+{
+}
+
+struct Store
+{
+ template <typename CheckParentFunc>
+ void updateChildCommon(CheckParentFunc c)
+ {
+ c();
+ }
+
+ template <typename T>
+ int& getStore();
+
+ template <typename T>
+ void updateChild(const T& obj)
+ {
+ updateChildCommon([this] () { getParent(getStore<T>()); });
+ }
+
+ void update(int obj);
+};
+
+void Store::update(int obj)
+{
+ updateChild(obj);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C
new file mode 100644
index 0000000..ee20203
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C
@@ -0,0 +1,11 @@
+// PR c++/54122
+// { dg-do compile { target c++11 } }
+
+enum E { F };
+
+template <typename A>
+struct C
+{
+ E e;
+ void f () { auto l = [&](void)->void { if (e == F) return; }; }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C
new file mode 100644
index 0000000..d7c5d2c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C
@@ -0,0 +1,37 @@
+// PR c++/56135
+// { dg-do run { target c++11 } }
+
+#include <functional>
+
+struct test {
+ template<typename T>
+ std::function<void()> broken(int x) {
+ return [=] { +x; print<T>(); };
+ }
+
+ std::function<void()> works0() {
+ return [=] { print<int>(); };
+ }
+
+ template<typename T>
+ std::function<void()> works1() {
+ return [=] { print<int>(); };
+ }
+
+ template<typename T>
+ std::function<void()> works2() {
+ return [=] { this->print<T>(); };
+ }
+
+ template<typename T>
+ void print() { if (this == 0) __builtin_abort (); }
+};
+
+int main(void) {
+ test().broken<int>(1)();
+ test().works0()();
+ test().works1<int>()();
+ test().works2<int>()();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C
new file mode 100644
index 0000000..07ddd08
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C
@@ -0,0 +1,19 @@
+// PR c++/54277
+// { dg-do compile { target c++11 } }
+
+struct Used
+{
+ void foo() { }
+};
+
+template <typename>
+struct S
+{
+ Used x;
+
+ void bar()
+ {
+ auto f = [this] { x.foo(); };
+ f();
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-type.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-type.C
new file mode 100644
index 0000000..a0c17ad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-type.C
@@ -0,0 +1,74 @@
+// Every id-expression that is a use (_basic.def.odr_ 3.2) of an entity
+// captured by copy is transformed into an access to the corresponding
+// unnamed data member of the closure type.
+//...
+// Every occurrence of decltype((x)) where x is a possibly parenthesized
+// id-expression that names an entity of automatic storage duration is
+// treated as if x were transformed into an access to a corresponding data
+// member of the closure type that would have been declared if x were a use
+// of the denoted entity.
+
+// So, other appearances of 'x' within decltype do not refer to the closure
+// member, because they are not "use"s in the sense of 3.2.
+
+// { dg-do compile { target c++11 } }
+
+template<class T, class U>
+struct same_type;
+template <class T>
+struct same_type<T,T> { };
+
+int main()
+{
+ int i;
+ [=] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int const&>();
+ i+1;
+ same_type<decltype((i)),int const&>();
+ same_type<decltype(i),int>();
+ };
+ [=] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int const&>();
+ same_type<decltype(i),int>();
+ };
+ [=] () mutable {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int &>();
+ same_type<decltype(i),int>();
+ };
+ [&] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int &>();
+ same_type<decltype(i),int>();
+ };
+ [i] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int const&>();
+ };
+ [&,i] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int const&>();
+ };
+ [i] () mutable {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int &>();
+ };
+ [&,i] () mutable {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int &>();
+ };
+ [&i] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int &>();
+ };
+ [=,&i] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int &>();
+ };
+ [] {
+ same_type<decltype(i),int>();
+ same_type<decltype((i)),int const&>(); // { dg-error "" "not captured" }
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-typedef.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-typedef.C
new file mode 100644
index 0000000..e1d1b50
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-typedef.C
@@ -0,0 +1,26 @@
+// PR c++/54975
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct identity
+{
+ typedef T type;
+};
+
+template<typename T>
+void f()
+{
+ typedef typename T::type A;
+ int i = 42;
+ int const &cri = i;
+ int volatile &vri = i;
+ [&]() {
+ A const &x = cri; // Problem here
+ A volatile &y = vri; // Likewise
+ };
+}
+
+int main()
+{
+ f<identity<int> >();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C
new file mode 100644
index 0000000..898f685
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C
@@ -0,0 +1,7 @@
+// 5.1.2/2: A lambda-expression shall not appear in an unevaluated operand.
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A { };
+A<decltype([]{ return 1; }())> a; // { dg-error "lambda.*unevaluated context" }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use.C
new file mode 100644
index 0000000..73677c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+int main(int argc, char** argv)
+{
+ int i;
+ int &ir = i;
+ const int ci = 1;
+ const int &cir = ci;
+
+ [] { sizeof (argc); sizeof (i); sizeof (ir); sizeof (ci); sizeof (cir); };
+ [] { int ia[ci]; };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C
new file mode 100644
index 0000000..96af09c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-use2.C
@@ -0,0 +1,12 @@
+// PR c++/50224
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-parameter" }
+
+struct T;
+
+void m(T& t) // ERROR here
+{
+ [&]{
+ t; // ``t`` is referenced here
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic1.C
new file mode 100644
index 0000000..e85f2bc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic1.C
@@ -0,0 +1,15 @@
+// PR c++/49672
+// { dg-do compile { target c++11 } }
+
+template<typename ... Args>
+static void foo()
+{
+ [](Args..., int x) {
+ x;
+ };
+}
+
+int main()
+{
+ foo();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic2.C
new file mode 100644
index 0000000..fab1f6c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic2.C
@@ -0,0 +1,57 @@
+// { dg-do run { target c++11 } }
+
+int g() { return 0; }
+template <class T, class... U>
+int g(T t, U... u)
+{
+ return t + g(u...);
+}
+
+template <class... T>
+int f1(T... t)
+{
+ return [t...] {
+ return g(t...);
+ }();
+}
+
+template <class... T>
+int f2(T... t)
+{
+ return [&t...] {
+ return g(t...);
+ }();
+}
+
+template <class... T>
+int f3(T... t)
+{
+ return [=] {
+ return g(t...);
+ }();
+}
+
+template <class... T>
+int f4(T... t)
+{
+ return [&] {
+ return g(t...);
+ }();
+}
+
+#define assert(E) do { if (!(E)) __builtin_abort(); } while(0)
+int main()
+{
+ assert (f1() == 0);
+ assert (f2() == 0);
+ assert (f3() == 0);
+ assert (f4() == 0);
+ assert (f1(42) == 42);
+ assert (f2(42) == 42);
+ assert (f3(42) == 42);
+ assert (f4(42) == 42);
+ assert (f1(1,2,3) == 6);
+ assert (f2(1,2,3) == 6);
+ assert (f3(1,2,3) == 6);
+ assert (f4(1,2,3) == 6);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C
new file mode 100644
index 0000000..f86c4b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn1.C
@@ -0,0 +1,9 @@
+// PR c++/41920
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall -Wextra" }
+
+int foo(int i)
+{
+ auto bar = [=](){ return i; };
+ return bar();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn2.C
new file mode 100644
index 0000000..6542392
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn2.C
@@ -0,0 +1,8 @@
+// PR c++/42370
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall" }
+
+void foo()
+{
+ []{ return 0; }();
+} // { dg-bogus "no return statement" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn3.C
new file mode 100644
index 0000000..5c5b24c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn3.C
@@ -0,0 +1,13 @@
+// PR c++/49482
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-but-set-parameter" }
+
+template<class T>
+void f() {
+ []( bool b ){ return b; };
+}
+
+int main()
+{
+ f<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn4.C
new file mode 100644
index 0000000..059c198
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-warn4.C
@@ -0,0 +1,8 @@
+// PR c++/52845
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall" }
+
+void f()
+{
+ [](){};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/linkage2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/linkage2.C
new file mode 100644
index 0000000..5285868
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/linkage2.C
@@ -0,0 +1,33 @@
+// DR 743: A type without linkage shall not be used as the type of a
+// variable or function with linkage, unless
+// o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
+// o the variable or function is not used (3.2 [basic.def.odr]) or is
+// defined in the same translation unit.
+
+// { dg-do compile { target c++11 } }
+
+template <typename T> struct B {
+ void g(T){}
+ void h(T); // { dg-error "never defined" }
+ friend void i(B, T){}
+ static T t1; // { dg-error "never defined" }
+ static T t2;
+};
+
+template <typename T> T B<T>::t2 = { };
+
+enum { E1 } e1; // OK, defined
+extern enum { E2 } e2; // { dg-error "never defined" }
+extern "C" enum { E3 } e3; // OK, extern "C"
+
+void f() {
+ struct A { int x; }; // no linkage
+ A a = {1};
+ B<A> ba; // declares B<A>::g(A) and B<A>::h(A)
+ ba.t1 = a; // error, B<T>::t never defined
+ ba.t2 = a; // OK
+ ba.g(a); // OK
+ ba.h(a); // error, B<T>::h never defined
+ i(ba, a); // OK
+ e1+e2+e3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/local-targ1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/local-targ1.C
new file mode 100644
index 0000000..588149a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/local-targ1.C
@@ -0,0 +1,31 @@
+// PR c++/51884
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_ZN1BIZN3fooIivE3barILb1EEEvvE1CEC1ERKS4_" } }
+
+template<typename TT>
+ struct test { static const int value = 0; };
+template<int I>
+ struct enable_if { typedef void type; };
+
+struct A { virtual void f() {} };
+template<typename U> struct B : A { B(); B(const B&); };
+template<typename U> B<U>::B() { }
+template<typename U> B<U>::B(const B&) { }
+
+template<class T> void g(T) { }
+
+template<typename T, typename = void> struct foo;
+template<typename T>
+struct foo<T,typename enable_if<test<T>::value>::type>
+{
+ template <bool P> void bar() {
+ struct C { } c;
+ B<C> b;
+ g(b);
+ }
+};
+
+int main() {
+ foo<int> f;
+ f.bar<true>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/long_long.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/long_long.C
new file mode 100644
index 0000000..6a602c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/long_long.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+void foo()
+{
+ long long x = 17;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/move1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/move1.C
new file mode 100644
index 0000000..5b9b17e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/move1.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+#include <utility>
+
+class A { };
+
+static void g ( A && ) { }
+
+template < class T > class B {
+public:
+ void f ( ) {
+ A a;
+ g ( std :: move ( a ) );
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named.C
new file mode 100644
index 0000000..7bd2093
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named.C
@@ -0,0 +1,41 @@
+// { dg-do link { target c++11 } }
+
+template<typename _Tp>
+inline _Tp&&
+movel(_Tp& __t)
+{ return static_cast<_Tp&&>(__t); }
+
+struct S {};
+struct T
+{
+ T(S && s_) : s(movel(s_)) {}
+ S && get() { return movel(s); }
+ operator S&&() { return movel(s); }
+ S && s;
+ S s2;
+};
+
+void named(S const &) {}
+void named(S&&);
+
+void unnamed(S const &);
+void unnamed(S&&) {}
+
+void f(S && p)
+{
+ S && s(movel(p));
+ T t(movel(s));
+
+ named(s); // variable reference
+ named(p); // parameter reference
+ named(t.s); // class member access
+
+ unnamed(t.get()); // function return
+ unnamed(t); // implicit conversion
+ unnamed(static_cast<S&&>(s)); // cast to rvalue
+ unnamed(static_cast<T&&>(t).s2); // cast to rvalue
+}
+
+int main()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named_refs.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named_refs.C
new file mode 100644
index 0000000..850179c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/named_refs.C
@@ -0,0 +1,28 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test: Named rvalue references are treated as lvalues.
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+
+struct A {};
+
+one foo(const A&) {return one();}
+two foo(A&&) {return two();}
+
+int test1(A&& a)
+{
+ sa<sizeof(foo(a)) == 1 * sizeof(long)> t1;
+ return 0;
+}
+
+int main()
+{
+ return test1(A());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/new1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/new1.C
new file mode 100644
index 0000000..2f002db
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/new1.C
@@ -0,0 +1,8 @@
+// PR c++/52216
+// { dg-require-effective-target c++11 }
+
+#include <new>
+
+int n;
+
+static_assert(!noexcept(::new (std::nothrow) int[n]), "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C
new file mode 100644
index 0000000..9f42535
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept01.C
@@ -0,0 +1,84 @@
+// Test for noexcept-expression
+// { dg-do compile { target c++11 } }
+// { dg-options "-O2" }
+
+#include <typeinfo>
+
+#define SA(X) static_assert(X, #X)
+
+void f();
+void g() throw();
+SA(noexcept(g()));
+SA(!noexcept(f()));
+SA(!noexcept(throw 1));
+SA(noexcept(42));
+
+struct A
+{
+ virtual ~A();
+};
+
+struct B: public A
+{
+ virtual ~B();
+};
+
+A* ap;
+
+struct C { };
+C* cp;
+
+SA (noexcept (dynamic_cast<B*>(ap)));
+SA (!noexcept (dynamic_cast<B&>(*ap)));
+SA (!noexcept (typeid (*ap)));
+SA (noexcept (typeid (*cp)));
+
+SA (!noexcept (true ? 1 : throw 1));
+SA (!noexcept (true || true ? 1 : throw 1));
+
+SA (noexcept (C()));
+
+struct D
+{
+ D() throw();
+};
+
+SA (noexcept (D()));
+
+struct E
+{
+ E() throw();
+ ~E();
+};
+
+SA (noexcept (E()));
+
+struct F
+{
+ virtual void f();
+};
+
+SA (noexcept (F()));
+
+struct G
+{
+ G() = default;
+ ~G() = default;
+};
+
+SA (noexcept (G()));
+
+template <class T, bool b>
+void tf()
+{
+ SA (noexcept (T()) == b);
+}
+
+template void tf<int,true>();
+template void tf<E, true>();
+
+// Make sure that noexcept uses the declared exception-specification, not
+// any knowledge we might have about whether or not the function really
+// throws.
+void h() { }
+SA(!noexcept(h()));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept02.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept02.C
new file mode 100644
index 0000000..5d5867a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept02.C
@@ -0,0 +1,54 @@
+// Test for noexcept-specification
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert(X, #X)
+
+void f();
+void f() noexcept(false);
+void f() noexcept(1 == 0);
+void f();
+
+SA(!noexcept(f()));
+
+void g() throw (int); // { dg-error "previous declaration" }
+void g() noexcept(false); // { dg-error "different exception" }
+void g();
+
+void h() throw();
+void h() noexcept;
+void h() throw();
+void h() noexcept;
+
+template <class T>
+void g (T) noexcept(noexcept(T())); // { dg-error "previous declaration" }
+template <class T>
+void g (T) noexcept(noexcept(T(0))); // { dg-error "different exception" }
+
+template <class T>
+void f (T) noexcept(noexcept(T()) && noexcept(T()));
+template <class T>
+void f (T) noexcept(noexcept(T()) && noexcept(T()));
+template <class T>
+void f2(T a) noexcept (noexcept (f (a)));
+
+struct A { A(); };
+SA(noexcept(f(1)));
+SA(!noexcept(f(A())));
+SA(noexcept(f2(1)));
+SA(!noexcept(f2(A())));
+
+template <class... Ts>
+void f3(Ts... ts) noexcept (noexcept (f(ts...)));
+
+SA(noexcept(f3(1)));
+SA(!noexcept(f3(A())));
+
+template <class T1, class T2>
+void f (T1, T2) noexcept(noexcept(T1(), T2()));
+
+struct B { };
+
+SA(noexcept(f3(1,B())));
+SA(!noexcept(f3(1,A())));
+SA(!noexcept(f3(A(),1)));
+SA(!noexcept(f3(A(),A())));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept03.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept03.C
new file mode 100644
index 0000000..2d37867
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept03.C
@@ -0,0 +1,52 @@
+// Runtime test for noexcept-specification.
+// { dg-options "-Wnoexcept" }
+// { dg-do run { target nonpic } }
+// { dg-require-effective-target c++11 }
+
+#include <exception>
+#include <cstdlib>
+
+void my_terminate ()
+{
+ std::exit (0);
+}
+
+void my_unexpected ()
+{
+ throw;
+}
+
+void g() { throw 1; }
+void (*p)() = g;
+void f () noexcept (false)
+{
+ p();
+}
+
+template <class T>
+void f(T) noexcept (noexcept (T())) // { dg-warning "false" }
+{
+ p();
+}
+
+template <class T>
+void f2(T a) noexcept (noexcept (f (a)))
+{
+ f(a);
+}
+
+struct A { A() { } }; // { dg-warning "does not throw" }
+
+int main()
+{
+ // noexcept(false) allows throw.
+ try { f(); } catch (int) { }
+ // noexcept(noexcept(A())) == noexcept(false).
+ try { f(A()); } catch (int) { }
+ try { f2(A()); } catch (int) { }
+
+ std::set_terminate (my_terminate);
+ // noexcept(noexcept(int())) == noexcept(true).
+ try { f2(1); } catch (...) { }
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept04.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept04.C
new file mode 100644
index 0000000..56ea1f4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept04.C
@@ -0,0 +1,30 @@
+// Make sure that we call terminate when a noexcept spec is violated.
+// The function pointers are there to make sure that
+// the compiler doesn't get clever about optimizing the calls based on
+// knowledge about the called functions.
+
+// { dg-do run { target c++11 } }
+
+#include <exception>
+#include <cstdlib>
+
+void my_terminate ()
+{
+ std::exit (0);
+}
+
+void g() { throw 1; }
+void (*p1)() = g;
+void f() noexcept { p1(); }
+void (*p2)() = f;
+void h() { p2(); }
+
+int main()
+{
+ std::set_terminate (my_terminate);
+
+ try { h(); }
+ catch (int) { }
+
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept05.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept05.C
new file mode 100644
index 0000000..a6c425d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept05.C
@@ -0,0 +1,19 @@
+// Make sure that we force an LSDA for a noexcept spec so
+// that the personality routine will call terminate. Also check that we
+// optimize away the EH cleanup for var because the personality routine
+// will call terminate before unwinding: there should not be an EH region
+// (i.e. LEHB/LEHE labels) around the call to g().
+
+// { dg-final { scan-assembler-not "_ZSt9terminatev" } }
+// { dg-final { scan-assembler-not "EHB" } }
+// { dg-final { scan-assembler "LSDA" } }
+
+// { dg-do compile { target c++11 } }
+
+struct A { ~A(); };
+void g();
+void f() noexcept
+{
+ A var;
+ g();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept06.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept06.C
new file mode 100644
index 0000000..7e1db66
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept06.C
@@ -0,0 +1,29 @@
+// Test that checking of a nothrow specification uses the one on the
+// definition.
+// { dg-do run { target c++11 } }
+
+#include <exception>
+#include <cstdlib>
+
+void my_unexpected ()
+{
+ std::abort ();
+}
+void my_terminate ()
+{
+ std::exit (0);
+}
+
+void f() throw();
+void f() noexcept
+{
+ throw 1;
+}
+
+int main()
+{
+ std::set_unexpected (my_unexpected);
+ std::set_terminate (my_terminate);
+ f();
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept07.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept07.C
new file mode 100644
index 0000000..90c50a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept07.C
@@ -0,0 +1,24 @@
+// Test that checking of a nothrow specification uses the one on the
+// definition.
+// { dg-do run { target c++11 } }
+
+#include <exception>
+#include <cstdlib>
+
+void my_unexpected ()
+{
+ std::exit (0);
+}
+
+void f() noexcept;
+void f() throw()
+{
+ throw 1;
+}
+
+int main()
+{
+ std::set_unexpected (my_unexpected);
+ f();
+ return 1;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept08.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept08.C
new file mode 100644
index 0000000..96af0fe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept08.C
@@ -0,0 +1,56 @@
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "overriding" }
+
+struct A
+{
+ virtual void f();
+ virtual void g() throw();
+ virtual void h() noexcept;
+ virtual void i() noexcept(false);
+ virtual void j() throw(int);
+};
+
+struct B: A
+{
+ void f() noexcept;
+ void g() noexcept;
+ void h() noexcept;
+ void i() noexcept;
+ void j() noexcept;
+};
+
+struct C: A
+{
+ void f() throw();
+ void g() throw();
+ void h() throw();
+ void i() throw();
+ void j() throw();
+};
+
+struct D: A
+{
+ void f() noexcept(false);
+ void g() noexcept(false); // { dg-error "looser" }
+ void h() noexcept(false); // { dg-error "looser" }
+ void i() noexcept(false);
+ void j() noexcept(false); // { dg-error "looser" }
+};
+
+struct E: A
+{
+ void f() throw(int);
+ void g() throw(int); // { dg-error "looser" }
+ void h() throw(int); // { dg-error "looser" }
+ void i() throw(int);
+ void j() throw(int);
+};
+
+struct F: A
+{
+ void f();
+ void g(); // { dg-error "looser" }
+ void h(); // { dg-error "looser" }
+ void i();
+ void j(); // { dg-error "looser" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept09.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept09.C
new file mode 100644
index 0000000..d26a3ae
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept09.C
@@ -0,0 +1,15 @@
+// Test that -Wnoexcept works with templates
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wnoexcept" }
+
+template <class T>
+T f (T t) { return t; } // { dg-warning "does not throw" }
+
+#define SA(X) static_assert(X, #X)
+
+SA (!noexcept(f(1))); // { dg-warning "noexcept" }
+
+int main()
+{
+ f(1); // Use f(int) so it gets instantiated
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept10.C
new file mode 100644
index 0000000..b802282
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept10.C
@@ -0,0 +1,27 @@
+// PR c++/49082
+// { dg-do compile { target c++11 } }
+
+namespace std { template <class T> T&& declval() noexcept; }
+
+struct Base
+{
+ Base(const Base&) noexcept(false);
+ Base(Base&&) noexcept(false);
+ ~Base() noexcept(false);
+};
+
+struct Derived
+: Base
+{
+ // Derived(const Derived&) = default;
+ // Derived(Derived&&) = default;
+};
+
+static_assert(!noexcept(Base(std::declval<const Base&>())), "Error");
+static_assert(!noexcept(Derived(std::declval<const Derived&>())), "Error"); // Error
+
+static_assert(!noexcept(Base(std::declval<Base&&>())), "Error");
+static_assert(!noexcept(Derived(std::declval<Derived&&>())), "Error"); // Error
+
+static_assert(!noexcept(std::declval<Base&>().~Base()), "Error"); // OK
+static_assert(!noexcept(std::declval<Derived&>().~Derived()), "Error"); // Error
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
new file mode 100644
index 0000000..6597f40
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
@@ -0,0 +1,53 @@
+// PR c++/49107
+// { dg-do compile { target c++11 } }
+
+template<typename _Tp>
+_Tp declval() noexcept;
+
+template<typename _Tp , typename = decltype(_Tp(declval<_Tp&&>()))>
+struct trait
+{
+ static const bool value=true;
+};
+
+template<class _T2>
+struct pair
+{
+ _T2 second;
+ void swap(pair& __p)
+ noexcept(trait<_T2>::value);
+};
+
+template < class R_ >
+struct Main
+{
+ Main() {}
+ Main(const typename R_::Sub1T& r) ;
+ Main(const typename R_::Sub2T& l) ;
+};
+
+template < class R_ >
+class Sub1
+{
+ typedef pair<typename R_::MainT> Rep;
+ Rep base;
+};
+
+template < class R_ >
+struct Sub2
+{
+ typedef pair<typename R_::MainT> Rep;
+ Rep base;
+};
+
+struct Kernel
+{
+ typedef Main<Kernel> MainT;
+ typedef Sub1<Kernel> Sub1T;
+ typedef Sub2<Kernel> Sub2T;
+};
+
+Main<Kernel> f()
+{
+ return Main<Kernel> ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept12.C
new file mode 100644
index 0000000..185364b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept12.C
@@ -0,0 +1,11 @@
+// Test that we handle merging with deferred noexcept.
+// { dg-do compile { target c++11 } }
+
+template <class U>
+struct O
+{
+ template <class T>
+ void f() noexcept(noexcept(T()));
+};
+
+template<> template<> void O<int>::f<int>() noexcept { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C
new file mode 100644
index 0000000..e52e9a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept13.C
@@ -0,0 +1,78 @@
+// PR c++/49107
+// { dg-do compile { target c++11 } }
+
+namespace std
+{
+ template<typename _Tp> _Tp&& declval() noexcept;
+
+ struct true_type { static const bool value = true; };
+ struct false_type { static const bool value = false; };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_impl
+ {
+ template<typename _Tp2, typename _Arg2, typename
+ = decltype(::new _Tp2(declval<_Arg2>()))>
+ static true_type __test(int);
+
+ template<typename, typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Tp, _Arg>(0)) type;
+ };
+
+ template<typename _Tp, typename _Arg>
+ struct __is_direct_constructible_new_safe
+ : public __is_direct_constructible_impl<_Tp, _Arg>::type
+ { };
+
+ template<class _T1, class _T2>
+ struct pair
+ {
+ pair() = default;
+ constexpr pair(const pair&) = default;
+
+ pair(pair&& __p)
+ noexcept(__is_direct_constructible_new_safe<_T2,_T2&&>::value);
+ };
+}
+
+template <class R_>
+struct Vector3
+{
+ typedef typename R_::Ray_3 Ray_3;
+ Vector3() {}
+ explicit Vector3(const Ray_3& r);
+};
+
+template < class R_ > class LineC3
+{
+ typedef typename R_::Vector_3 Vector_3;
+ std::pair<int, Vector_3> x;
+};
+
+template < class R_ > class RayH3
+{
+ typedef typename R_::Vector_3 Vector_3;
+ std::pair<int, Vector_3> x;
+};
+
+template <typename Kernel >
+struct Homogeneous_base
+{
+ typedef LineC3<Kernel> Line_3;
+ typedef RayH3<Kernel> Ray_3;
+};
+
+template < typename RT_>
+struct Simple_homogeneous
+: public Homogeneous_base< Simple_homogeneous<RT_> >
+{
+ typedef Vector3<Simple_homogeneous<RT_> > Vector_3;
+};
+
+int main()
+{
+ typedef Simple_homogeneous<double> R;
+ R::Line_3 l3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept14.C
new file mode 100644
index 0000000..913f2ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept14.C
@@ -0,0 +1,4 @@
+// PR c++/50309
+// { dg-do compile { target c++11 } }
+
+void foo () noexcept () { } // { dg-error "expected" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
new file mode 100644
index 0000000..909ee97
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
@@ -0,0 +1,34 @@
+// PR c++/50391
+// { dg-do compile { target c++11 } }
+
+#include <type_traits>
+
+template<class Tp>
+ struct single
+ {
+ Tp elem; // { dg-error "incomplete type" }
+
+ constexpr single(const Tp& e)
+ : elem(e) { }
+
+ single(single&& s)
+ noexcept(std::is_nothrow_move_constructible<Tp>::value)
+ : elem(s.elem) { }
+ };
+
+template<class Tp>
+ constexpr single<typename std::decay<Tp>::type>
+ make_single(Tp&& x)
+ {
+ return single<typename std::decay<Tp>::type>(x);
+ }
+
+class Blob; // { dg-error "forward declaration" }
+
+void
+foo(Blob *b)
+{
+ make_single(*b);
+}
+
+// { dg-prune-output "include" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept16.C
new file mode 100644
index 0000000..10e0be9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept16.C
@@ -0,0 +1,130 @@
+// PR c++/50972
+// { dg-do compile { target c++11 } }
+// Ignore all errors, we're just testing that this doesn't ICE
+// { dg-prune-output "error" }
+
+namespace std
+typedef long unsigned int size_t;
+template<typename...>
+struct __and_;
+template<typename _Tp>
+struct is_nothrow_move_constructible
+{
+};
+template<typename _Tp>
+struct is_nothrow_move_assignable
+struct __add_rvalue_reference_helper<_Tp, true>
+{ typedef _Tp&& type; };
+template<typename _Tp>
+struct add_rvalue_reference
+ : public __add_rvalue_reference_helper<_Tp>
+{
+};
+template<typename _Tp>
+inline typename add_rvalue_reference<_Tp>::type
+declval() noexcept
+{
+}
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+template<typename _Tp>
+class new_allocator
+{
+};
+}
+namespace std __attribute__ ((__visibility__ ("default")))
+class allocator: public __gnu_cxx::new_allocator<_Tp>
+{
+ template<typename _Tp1>
+ struct rebind
+ { typedef allocator<_Tp1> other; };
+};
+}
+namespace std __attribute__ ((__visibility__ ("default")))
+template<typename _Alloc, typename _Tp>
+struct __alloctr_rebind<_Alloc, _Tp, true>
+{
+ typedef typename _Alloc::template rebind<_Tp>::other __type;
+};
+template<typename _Alloc>
+struct allocator_traits
+{
+ template<typename _Tp>
+ struct __rebind_alloc
+ {
+ typedef typename __alloctr_rebind<_Alloc, _Tp>::__type __type;
+ };
+}
+ }
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+template<typename _Alloc>
+struct __alloc_traits
+{
+ typedef std::allocator_traits<_Alloc> _Base_type;
+ static constexpr bool _S_nothrow_swap()
+ {
+ return !_S_propagate_on_swap()
+ || noexcept(swap(std::declval<_Alloc&>(), std::declval<_Alloc&>()));
+ }
+ template<typename _Tp>
+ struct rebind
+ { typedef typename _Base_type::template __rebind_alloc<_Tp>::__type other; };
+};
+}
+namespace std __attribute__ ((__visibility__ ("default")))
+template<typename _Tp, typename _Alloc>
+struct _Vector_base
+{
+ typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+ rebind<_Tp>::other _Tp_alloc_type;
+};
+template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+class vector : protected _Vector_base<_Tp, _Alloc>
+{
+ typedef _Vector_base<_Tp, _Alloc> _Base;
+ typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+ typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
+ swap(vector& __x)
+ noexcept(_Alloc_traits::_S_nothrow_swap());
+};
+}
+namespace lexertl
+namespace detail
+}
+namespace detail
+template<typename id_type>
+struct basic_internals
+{
+ typedef std::vector<id_type> id_type_vector;
+};
+};
+template<typename char_type, typename id_type = std::size_t>
+class basic_state_machine
+{
+ typedef detail::basic_internals<id_type> internals;
+ void minimise ()
+ {
+ minimise_dfa (dfa_alphabet_, *dfa_, size_);
+ }
+ typedef typename internals::id_type_vector id_type_vector;
+ void minimise_dfa (const id_type dfa_alphabet_,
+ id_type_vector &dfa_, std::size_t size_)
+ {
+ id_type_vector new_dfa_ (front_, front_ + dfa_alphabet_);
+ dfa_.swap (new_dfa_);
+ }
+}
+ }
+namespace std __attribute__ ((__visibility__ ("default")))
+template<typename _Tp>
+void
+swap(_Tp&, _Tp&)
+ noexcept(__and_<is_nothrow_move_constructible<_Tp>,
+ is_nothrow_move_assignable<_Tp>>::value)
+ ;
+typedef lexertl::basic_state_machine<char32_t> lexstate;
+lexstate m_state_machine;
+GenerateLexer()
+{
+ m_state_machine.minimise();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept17.C
new file mode 100644
index 0000000..b27acef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept17.C
@@ -0,0 +1,54 @@
+// PR c++/50043
+// { dg-do compile { target c++11 } }
+
+struct True1 {};
+struct True2 { ~True2(); };
+struct True3 { ~True3(){ throw 0; } };
+struct False { ~False() noexcept(false); };
+
+template <typename Base>
+struct A : Base
+{
+};
+
+template <typename Member>
+struct B
+{
+ Member mem;
+};
+
+template <typename Base, typename Member>
+struct C : Base
+{
+ Member mem;
+};
+
+#define SA(X) static_assert(X, #X)
+
+SA( noexcept(True1()));
+SA( noexcept(True2()));
+SA( noexcept(True3()));
+SA(!noexcept(False()));
+
+SA( noexcept(A<True1>()));
+SA( noexcept(A<True2>()));
+SA( noexcept(A<True3>()));
+SA(!noexcept(A<False>()));
+
+SA( noexcept(B<True1>()));
+SA( noexcept(B<True2>()));
+SA( noexcept(B<True3>()));
+SA(!noexcept(B<False>()));
+
+SA( noexcept(C<True1, True2>()));
+SA( noexcept(C<True1, True3>()));
+SA( noexcept(C<True2, True3>()));
+SA( noexcept(C<True2, True1>()));
+SA( noexcept(C<True3, True1>()));
+SA( noexcept(C<True3, True2>()));
+SA(!noexcept(C<False, True1>()));
+SA(!noexcept(C<False, True2>()));
+SA(!noexcept(C<False, True3>()));
+SA(!noexcept(C<True1, False>()));
+SA(!noexcept(C<True2, False>()));
+SA(!noexcept(C<True3, False>()));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept18.C
new file mode 100644
index 0000000..e851b86
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept18.C
@@ -0,0 +1,10 @@
+// PR c++/54207
+// { dg-do compile { target c++11 } }
+
+typedef bool B;
+constexpr B foo () { return true; }
+
+void
+bar () noexcept (foo ())
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept19.C
new file mode 100644
index 0000000..d303a8c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept19.C
@@ -0,0 +1,28 @@
+// PR c++/55652
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct A
+{
+ static const bool a = false;
+};
+
+template <typename X, typename Y = A <X>>
+struct B
+{
+ B () noexcept (A <Y>::a) {}
+};
+
+template <typename X, typename Y>
+struct C
+{
+ X x;
+ Y y;
+};
+
+struct D
+{
+ D () throw (int);
+};
+
+C <D, B <D>> c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept20.C
new file mode 100644
index 0000000..ec4f3a1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept20.C
@@ -0,0 +1,22 @@
+// PR c++/56071
+// { dg-do compile { target c++11 } }
+
+class B
+{
+ template <typename T> friend struct A;
+ B() {}
+};
+
+template <typename T>
+struct A
+{
+ A() noexcept(noexcept(B())) { }
+};
+
+struct C
+{
+ C()
+ {
+ static_assert( !noexcept(A<int>()), "" );
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept21.C
new file mode 100644
index 0000000..ec88e1d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept21.C
@@ -0,0 +1,87 @@
+// PR c++/57645
+// { dg-do compile { target c++11 } }
+
+struct Thrower
+{
+ ~Thrower() noexcept(false) { throw 1; }
+};
+
+struct ExplicitA
+{
+ ~ExplicitA() {}
+
+ Thrower t;
+};
+
+struct ExplicitB
+{
+ ~ExplicitB();
+
+ Thrower t;
+};
+
+ExplicitB::~ExplicitB() {}
+
+struct ExplicitC
+{
+ ~ExplicitC() = default;
+
+ Thrower t;
+};
+
+struct ExplicitD
+{
+ ~ExplicitD();
+
+ Thrower t;
+};
+
+ExplicitD::~ExplicitD() = default;
+
+struct NoThrower
+{
+ ~NoThrower() noexcept(true) {}
+};
+
+struct ExplicitE
+{
+ ~ExplicitE() {}
+
+ NoThrower t;
+};
+
+struct ExplicitF
+{
+ ~ExplicitF();
+
+ NoThrower t;
+};
+
+ExplicitF::~ExplicitF() {}
+
+struct ExplicitG
+{
+ ~ExplicitG() = default;
+
+ NoThrower t;
+};
+
+struct ExplicitH
+{
+ ~ExplicitH();
+
+ NoThrower t;
+};
+
+ExplicitH::~ExplicitH() = default;
+
+#define SA(X) static_assert(X, #X)
+
+SA( !noexcept(ExplicitA()) );
+SA( !noexcept(ExplicitB()) );
+SA( !noexcept(ExplicitC()) );
+SA( !noexcept(ExplicitD()) );
+SA( noexcept(ExplicitE()) );
+SA( noexcept(ExplicitF()) );
+SA( noexcept(ExplicitG()) );
+SA( noexcept(ExplicitH()) );
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
new file mode 100644
index 0000000..7aab0f4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
@@ -0,0 +1,21 @@
+// PR c++/60046
+// { dg-require-effective-target c++11 }
+
+constexpr bool foo () { return noexcept (true); }
+template <typename T>
+struct V
+{
+ void bar (V &) noexcept (foo ()) {}
+};
+template <typename T>
+struct W : public V <int>
+{
+ void bar (W &x) { V <int>::bar (x); }
+};
+
+int
+main ()
+{
+ W <int> a, b;
+ a.bar (b);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.C
new file mode 100644
index 0000000..d38028c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.C
@@ -0,0 +1,21 @@
+// DR 757 allows using types without linkage in declarations with linkage.
+// Test that this doesn't lead to link-time collisions.
+
+// { dg-additional-sources "nolinkage1a.cc" }
+// { dg-do link { target c++11 } }
+
+#include "nolinkage1.h"
+
+typedef struct { int i; } *AP;
+
+void f(AP) { }
+
+A<AP> a;
+
+static void g()
+{
+ struct B { };
+ A<B> a;
+}
+
+int main() { g(); f(0); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.h b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.h
new file mode 100644
index 0000000..3cb5f63
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1.h
@@ -0,0 +1,8 @@
+template <class T>
+struct A
+{
+ A();
+};
+
+template <class T>
+A<T>::A() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc
new file mode 100644
index 0000000..f8528f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nolinkage1a.cc
@@ -0,0 +1,15 @@
+#include "nolinkage1.h"
+
+typedef struct { double d; } *BP;
+
+void f(BP) { }
+
+A<BP> b;
+
+static void g()
+{
+ struct B { };
+ A<B> a;
+}
+
+int dummy() { g(); f(0); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/not_special.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/not_special.C
new file mode 100644
index 0000000..22054ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/not_special.C
@@ -0,0 +1,52 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test that move constructor and move assignement are special.
+// That is, their presence should cause compiler declared
+// copy ctor or assignment to be deleted.
+
+// { dg-do compile { target c++11 } }
+
+#include <assert.h>
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+
+int copy = 0;
+int assign = 0;
+
+struct base
+{
+ base() {}
+ base(const base&) {++copy;}
+ base& operator=(const base&) {++assign; return *this;}
+};
+
+struct derived // { dg-message "declares a move" }
+ : base
+{
+ derived() {}
+ derived(derived&&) {}
+ derived& operator=(derived&&) {return *this;}
+};
+
+int test1()
+{
+ derived d;
+ derived d2(static_cast<derived&&>(d)); // should not call base::(const base&)
+ assert(copy == 0);
+ derived d3(d); // { dg-error "deleted" }
+ assert(copy == 1);
+ d2 = static_cast<derived&&>(d); // should not call base::operator=
+ assert(assign == 0);
+ d3 = d; // { dg-error "deleted" }
+ assert(assign == 1);
+ return 0;
+}
+
+int main()
+{
+ return test1();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C
new file mode 100644
index 0000000..b5b8dab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C
@@ -0,0 +1,10 @@
+// PR c++/50707
+// { dg-do compile { target c++11 } }
+
+int g;
+
+struct S {
+ int const v=g;
+};
+
+S s;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C
new file mode 100644
index 0000000..e1b9d69
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert(X,#X)
+
+struct A
+{
+ int i = f();
+ int j { f() };
+ static constexpr int f() { return 42; }
+};
+
+constexpr A a;
+SA(a.i == 42);
+SA(a.j == 42);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C
new file mode 100644
index 0000000..96ed2c8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i = f();
+ static int f(int i = 42) { return i; }
+};
+
+A a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C
new file mode 100644
index 0000000..90f9102
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C
@@ -0,0 +1,19 @@
+// Do NSDMI get deferred instantiation?
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct A
+{
+ T t = T(42);
+ constexpr A() { }
+ A(T t): t(t) { }
+};
+
+struct B { };
+
+#define SA(X) static_assert(X,#X)
+
+constexpr A<int> a1;
+SA(a1.t == 42);
+
+A<B> a2 {B()};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C
new file mode 100644
index 0000000..60ca88d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C
@@ -0,0 +1,17 @@
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i = 42;
+ int j = f();
+ int k = this->f();
+ int f() { return i++; }
+};
+
+A a;
+
+int main()
+{
+ if (a.j != 42 || a.k != 43 || a.i != 44)
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C
new file mode 100644
index 0000000..a83d40b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C
@@ -0,0 +1,20 @@
+// PR c++/51666 (DR 325)
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct tuple
+{
+ tuple(T, U) { }
+};
+
+struct Y
+{
+ tuple<int, int> tt = tuple<int, int>{1, 2};
+};
+
+struct A
+{
+ int i = 0;
+ int j = i < 42, k; // OK, declares j and k
+ int l = i < 42, 24; // { dg-error "" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C
new file mode 100644
index 0000000..033c142
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+struct A // { dg-error "non-static data member" }
+{
+ int i = (A(), 42); // { dg-message "required here" }
+};
+
+A a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C
new file mode 100644
index 0000000..edcf588
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C
@@ -0,0 +1,18 @@
+// Core issue 1351
+// { dg-do run { xfail *-*-* } }
+// { dg-require-effective-target c++11 }
+
+bool fail;
+struct A
+{
+ int i = fail ? throw "noooooooo" : 42;
+};
+
+int main()
+{
+ A a1;
+ if (a1.i != 42) return 1;
+ fail = true;
+ try { A a2; }
+ catch (...) { }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C
new file mode 100644
index 0000000..e54be05
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C
@@ -0,0 +1,14 @@
+// PR c++/50563
+// { dg-do compile { target c++11 } }
+
+struct S1 {
+ int a{10}, b{20}; // OK
+};
+
+struct S2 {
+ int a, b = 20; // OK
+};
+
+struct S3 {
+ int a = 10, b = 20;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C
new file mode 100644
index 0000000..d366986
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C
@@ -0,0 +1,32 @@
+// PR c++/50930
+// { dg-do compile { target c++11 } }
+
+struct nmc {
+ nmc() = default;
+ nmc(nmc&&) = delete; // line 3
+};
+
+struct A { // line 6
+ nmc n{};
+ nmc n2 = {};
+} a; // line 8
+
+// ------
+
+struct lock_t {
+ int lock[4];
+};
+
+struct pthread_mutex_t {
+ volatile lock_t __spinlock;
+};
+
+struct mutex {
+ pthread_mutex_t m = { };
+ mutex() = default;
+};
+
+int main()
+{
+ mutex mx;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list3.C
new file mode 100644
index 0000000..a554f93
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-list3.C
@@ -0,0 +1,21 @@
+// PR c++/54998
+// { dg-do compile { target c++11 } }
+
+class Foo {
+public:
+private:
+ static const int kRows = 4;
+ static const int kCols = 4;
+
+ union {
+ float m_n[kRows][kCols];
+ float m_m[kRows * kCols] = {
+ 1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 1.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ };
+};
+
+Foo myFoo;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
new file mode 100644
index 0000000..2330365
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-local.C
@@ -0,0 +1,8 @@
+// PR c++/55240
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ int q = 1; // { dg-message "declared here" }
+ struct test { int x = q; } instance; // { dg-error "local variable" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C
new file mode 100644
index 0000000..fac979b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-sizeof.C
@@ -0,0 +1,7 @@
+// PR c++/57673
+// { dg-do compile { target c++11 } }
+
+template< int ... p >
+struct d {
+ int n = sizeof ... ( p );
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
new file mode 100644
index 0000000..7316dc6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
@@ -0,0 +1,20 @@
+// { dg-do run { target c++11 } }
+
+struct base
+{
+ int calc_avg() { return 42; }
+};
+
+template <class T> struct nsdmi : T
+{
+ nsdmi() {}
+ int avg() { return avg_; }
+ int avg_ = this->calc_avg();
+};
+
+int main()
+{
+ nsdmi<base> x;
+ if (x.avg() != 42)
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C
new file mode 100644
index 0000000..fcb405c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C
@@ -0,0 +1,15 @@
+// PR c++/50614
+// { dg-do compile { target c++11 } }
+// { dg-options "-fcompare-debug" }
+
+struct A
+{
+ int f ();
+};
+
+template <int> struct B : A
+{
+ int i = this->f ();
+};
+
+B<0> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template3.C
new file mode 100644
index 0000000..8a6f913
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template3.C
@@ -0,0 +1,16 @@
+// PR c++/58760
+// { dg-do compile { target c++11 } }
+
+enum en
+{
+ a,b,c
+};
+
+struct B
+{
+ template<en N>
+ struct A
+ {
+ const int X = N;
+ };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template4.C
new file mode 100644
index 0000000..ff8dc7e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template4.C
@@ -0,0 +1,24 @@
+// PR c++/57887
+// { dg-do compile { target c++11 } }
+
+struct B
+{
+ template<int N>
+ struct A
+ {
+ int X = N;
+ };
+};
+
+template<int M>
+struct C
+{
+ int Y = M;
+
+ template<int N>
+ struct A
+ {
+ int X = N;
+ int Y = M;
+ };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template5.C
new file mode 100644
index 0000000..fdaf461
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template5.C
@@ -0,0 +1,38 @@
+// PR c++/58599
+// { dg-do compile { target c++11 } }
+
+template<int> struct A1;
+
+template<> struct A1<0>
+{
+ template<typename, typename...> struct B1
+ {
+ template<typename> int foo1() {}
+
+ int i1 = foo1<int>();
+ };
+};
+
+template<int> struct A2;
+
+template<> struct A2<0>
+{
+ template<typename, typename> struct B2
+ {
+ template<typename> int foo2() {}
+
+ int i2 = foo2<int>();
+ };
+};
+
+template<int> struct A3;
+
+template<> struct A3<0>
+{
+ template<typename> struct B3
+ {
+ template<typename> int foo3() {}
+
+ int i3 = foo3<int>();
+ };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template6.C
new file mode 100644
index 0000000..33ed82d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template6.C
@@ -0,0 +1,13 @@
+// PR c++/58829
+// { dg-do compile { target c++11 } }
+
+struct A {
+ int f() {return 0;}
+} a;
+
+struct B {
+ template<int=0> struct C {
+ int i = a.f();
+ };
+};
+B::C<> c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template7.C
new file mode 100644
index 0000000..cec7b7b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template7.C
@@ -0,0 +1,15 @@
+// PR c++/58725
+// { dg-do compile { target c++11 } }
+
+struct A {
+ template<int=0>
+ struct B {
+ struct C {
+ int x = 0;
+ double y = x;
+ } c;
+ };
+};
+int main() {
+ A::B<>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template8.C
new file mode 100644
index 0000000..ef0dddd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-template8.C
@@ -0,0 +1,27 @@
+// PR c++/58188
+// { dg-do compile { target c++11 } }
+
+struct B {};
+struct A
+{
+ A( B );
+};
+
+struct Bar
+{
+ template< unsigned v >
+ struct Foo
+ {
+ A z = B();
+ unsigned value;
+ Foo(): value( v ) {}
+ };
+
+ struct Baz
+ {
+ Foo< 8 > foo1;
+ Foo< 1 > foo3;
+ };
+};
+
+Bar::Baz baz;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union1.C
new file mode 100644
index 0000000..11bdd88
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union1.C
@@ -0,0 +1,25 @@
+// PR c++/52377
+// { dg-do run { target c++11 } }
+
+union Test
+{
+ int a{4};
+};
+
+union B
+{
+ int i = 42;
+ double d;
+ B() = default;
+ B(double d): d(d) { }
+};
+
+int main()
+{
+ Test t;
+ B b;
+ B b2(4.2);
+
+ if (t.a != 4 || b.i != 42 || b2.d != 4.2)
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union2.C
new file mode 100644
index 0000000..0692327
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union2.C
@@ -0,0 +1,18 @@
+// PR c++/52377
+// { dg-require-effective-target c++11 }
+
+union A // { dg-error "multiple" }
+{
+ int i = 4;
+ int j = 2;
+};
+
+A a;
+
+union B
+{
+ int i,j;
+ B(): i(1), j(2) {} // { dg-error "multiple" }
+};
+
+B b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
new file mode 100644
index 0000000..35f6509
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
@@ -0,0 +1,10 @@
+// PR c++/58965
+// { dg-require-effective-target c++11 }
+
+void foo()
+{
+ static union
+ {
+ int i = i;
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union4.C
new file mode 100644
index 0000000..c21fdca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union4.C
@@ -0,0 +1,12 @@
+// PR c++/59269
+// { dg-require-effective-target c++11 }
+
+union U
+{
+ int& i = 0; // { dg-error "reference" }
+};
+
+void foo()
+{
+ U();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C
new file mode 100644
index 0000000..57dfd59
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C
@@ -0,0 +1,11 @@
+// PR c++/58701
+// { dg-require-effective-target c++11 }
+// { dg-final { scan-assembler "7" } }
+
+static union
+{
+ union
+ {
+ int i = 7;
+ };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C
new file mode 100644
index 0000000..aeafe1c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C
@@ -0,0 +1,25 @@
+// PR c++/51611
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ A(): i(42) { }
+ int i;
+ int f() { return i; }
+};
+
+struct B : virtual A
+{
+ int j = i + f();
+ int k = A::i + A::f();
+};
+
+struct C: B { int pad; };
+
+int main()
+{
+ C c;
+ if (c.j != 84 || c.k != 84)
+ __builtin_abort();
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual2.C
new file mode 100644
index 0000000..157854c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual2.C
@@ -0,0 +1,8 @@
+// PR c++/51474
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ virtual int foo() = 0;
+ int i = foo(); // { dg-warning "pure virtual" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi1.C
new file mode 100644
index 0000000..976b8f4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi1.C
@@ -0,0 +1,52 @@
+// { dg-do run { target c++11 } }
+
+struct A
+{
+ int i = 42;
+};
+
+struct B
+{
+ int i = 42;
+ B() { }
+ B(int i): i(i) { }
+};
+
+template <class T, T t>
+struct C
+{
+ T m = t;
+};
+
+template <class T, T t>
+struct D
+{
+ T m = t;
+ D() { }
+ D(T m):m(m) { }
+};
+
+int main()
+{
+ A a1;
+ if (a1.i != 42) return 1;
+ A a2{};
+ if (a2.i != 42) return 2;
+ A a3[1];
+ if (a3[0].i != 42) return 3;
+
+ B b1;
+ if (b1.i != 42) return 3;
+ B b2 (24);
+ if (b2.i != 24) return 4;
+
+ C<int,3> c1;
+ if (c1.m != 3) return 5;
+ C<int,5> c2 {};
+ if (c2.m != 5) return 6;
+
+ D<int,3> d1;
+ if (d1.m != 3) return 7;
+ D<int,3> d2 (5) ;
+ if (d2.m != 5) return 8;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi2.C
new file mode 100644
index 0000000..31a638f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi2.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ constexpr A(int i): i(i) {}
+};
+
+struct B
+{
+ A a1 = 1;
+ A a2 { 2 };
+ A a3 = { 3 };
+};
+
+#define SA(X) static_assert(X,#X)
+
+constexpr B b;
+SA(b.a1.i == 1);
+SA(b.a2.i == 2);
+SA(b.a3.i == 3);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi3.C
new file mode 100644
index 0000000..a8e8cdf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi3.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i;
+ explicit constexpr A(int i): i(i) {}
+};
+
+struct B
+{
+ A a1 = 1; // { dg-error "" }
+ A a2 { 2 };
+ A a3 = { 3 }; // { dg-error "" }
+};
+
+constexpr B b; // { dg-error "B::B" }
+
+// { dg-message "a1. is invalid" "" { target *-*-* } 11 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi4.C
new file mode 100644
index 0000000..6f97b06
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi4.C
@@ -0,0 +1,23 @@
+// { dg-do run { target c++11 } }
+
+int c;
+
+struct A
+{
+ A() { }
+ A(const A&) { }
+};
+
+A f() { ++c; return A(); }
+
+struct B
+{
+ A a = f();
+};
+
+int main()
+{
+ B b1, b2;
+ if (c != 2)
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
new file mode 100644
index 0000000..bade28f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+struct X
+{
+ int x = 5;
+ int f() { return x; }
+};
+struct Y : X
+{
+ int y = this->x;
+};
+template <class T> struct Z : T
+{
+ int y = this->f();
+};
+int main()
+{
+ Y foo;
+ Z<X> bar;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi6.C
new file mode 100644
index 0000000..e78f500
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi6.C
@@ -0,0 +1,8 @@
+// Origin PR c++/51477
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ typedef int int T; // { dg-error "two or more data types in declaration" }
+ struct T x[1] = { 0 }; // { dg-error "invalid|forward" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi7.C
new file mode 100644
index 0000000..4b08474
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi7.C
@@ -0,0 +1,17 @@
+// PR c++/53594
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wuninitialized" }
+
+struct A
+{
+ const int a = 6; // { dg-bogus "non-static const member" }
+ static int b;
+ int &c = b; // { dg-bogus "non-static reference" }
+};
+
+struct B
+{
+ const int d; // { dg-warning "non-static const member" }
+ int &e; // { dg-warning "non-static reference" }
+ int f = 7;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi8.C
new file mode 100644
index 0000000..f89bec6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi8.C
@@ -0,0 +1,8 @@
+// PR c++/55670
+// { dg-do compile { target c++11 } }
+
+template <class T> using F = T;
+struct X {
+ F<void ()>* fp = nullptr;
+};
+int main () { return 0; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
new file mode 100644
index 0000000..febe0ec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
@@ -0,0 +1,13 @@
+// PR c++/58162
+// { dg-require-effective-target c++11 }
+
+struct A {
+ A();
+ A(A&&);
+};
+
+struct B {
+ A const a = A();
+};
+
+B b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr01.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr01.C
new file mode 100644
index 0000000..90917d7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr01.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+// Test assignment to pointer
+
+char* const cp1 = nullptr;
+char* const cp2 = __null;
+char* const cp3 = 0;
+decltype(nullptr) mynull = 0;
+char* const cp4 = mynull;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr02.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr02.C
new file mode 100644
index 0000000..50b3d07
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr02.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+// Test assignment to nullptr_t
+
+typedef decltype(nullptr) nullptr_t;
+
+const nullptr_t np1 = nullptr;
+const nullptr_t np2 = __null;
+const nullptr_t np3 = 0;
+const nullptr_t np4 = np1;
+const nullptr_t np5 = np2;
+const nullptr_t np6 = np3;
+const nullptr_t np7 = np4;
+const nullptr_t np8 = np5;
+const nullptr_t np9 = np6;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr03.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr03.C
new file mode 100644
index 0000000..cc3c031
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr03.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+// Test assignment to int
+
+const int n1 = nullptr; // { dg-error "cannot convert " }
+decltype(nullptr) mynull = 0;
+const int n2 = mynull; // { dg-error "cannot convert " }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr04.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
new file mode 100644
index 0000000..372ac51
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+// Test cast to int
+
+__extension__ typedef __INTPTR_TYPE__ intptr_t;
+
+const int n4 = static_cast<const int>(nullptr); // { dg-error "invalid static_cast " }
+const short int n5 = reinterpret_cast<short int>(nullptr); // { dg-error "loses precision" }
+const intptr_t n6 = reinterpret_cast<intptr_t>(nullptr);
+const intptr_t n7 = (intptr_t)nullptr;
+
+decltype(nullptr) mynull = 0;
+const int n8 = static_cast<const int>(mynull); // { dg-error "invalid static_cast " }
+const short int n9 = reinterpret_cast<short int>(mynull); // { dg-error "loses precision" }
+const intptr_t n10 = reinterpret_cast<intptr_t>(mynull);
+const intptr_t n11 = (intptr_t)mynull;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr05.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr05.C
new file mode 100644
index 0000000..65121b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr05.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+// Test assignment to method pointer
+
+class F { };
+
+typedef void (F::*pmf)();
+
+const pmf pmf1 = nullptr;
+const pmf pmf2 = __null;
+const pmf pmf3 = 0;
+decltype(nullptr) mynull = 0;
+const pmf pmf4 = mynull;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr06.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr06.C
new file mode 100644
index 0000000..e933c35
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr06.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+// Test compare to pointer
+
+#define assert_true(b) do { char c[2 * bool(b) - 1]; } while(0)
+
+char* const cp1 = nullptr;
+
+void fun()
+{
+ assert_true(cp1 == nullptr);
+ decltype(nullptr) mynull = 0;
+ assert_true(cp1 == mynull);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr07.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr07.C
new file mode 100644
index 0000000..b2ef515
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr07.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+// Test compare to int
+
+void fun()
+{
+ int n = 0;
+ if( n == nullptr ); // { dg-error "invalid operands of types " }
+ const int m = 1;
+ if( m == nullptr ); // { dg-error "invalid operands of types " }
+ decltype(nullptr) mynull = 0;
+ if( n == mynull ); // { dg-error "invalid operands of types " }
+ if( m == mynull ); // { dg-error "invalid operands of types " }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr08.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr08.C
new file mode 100644
index 0000000..dbf1632
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr08.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+// Test conversion to bool
+
+#define assert_true(b) do { char c[2 * bool(b) - 1]; } while(0)
+
+void fun()
+{
+ assert_true(nullptr ? false : true);
+ decltype(nullptr) mynull = 0;
+ assert_true(mynull ? false : true);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr09.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr09.C
new file mode 100644
index 0000000..1422a35
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr09.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+// Test compare to literal 0
+
+void fun()
+{
+ if( nullptr == 0 );
+ decltype(nullptr) mynull = 0;
+ if( mynull == 0 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr10.C
new file mode 100644
index 0000000..e27d658
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr10.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+// Test arithmetic operations
+
+void fun()
+{
+ nullptr = 0; // { dg-error "lvalue required as left operand" }
+ nullptr + 2; // { dg-error "invalid operands of types " }
+ decltype(nullptr) mynull = 0;
+ mynull = 1; // { dg-error "cannot convert" }
+ mynull = 0;
+ mynull + 2; // { dg-error "invalid operands of types " }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr11.C
new file mode 100644
index 0000000..f81f0c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr11.C
@@ -0,0 +1,39 @@
+// { dg-do compile { target c++11 } }
+
+// Test relational operators
+
+#define assert_true(b) do { char c[2 * bool(b) - 1]; } while(0)
+#define assert_false(b) do { char c[1 - 2 * bool(b)]; } while(0)
+
+void fun()
+{
+ assert_true(nullptr == nullptr);
+ assert_false(nullptr != nullptr);
+ assert_false(nullptr < nullptr);
+ assert_false(nullptr > nullptr);
+ assert_true(nullptr <= nullptr);
+ assert_true(nullptr >= nullptr);
+
+ decltype(nullptr) mynull = 0;
+
+ assert_true(mynull == nullptr);
+ assert_false(mynull != nullptr);
+ assert_false(mynull < nullptr);
+ assert_false(mynull > nullptr);
+ assert_true(mynull <= nullptr);
+ assert_true(mynull >= nullptr);
+
+ assert_true(nullptr == mynull);
+ assert_false(nullptr != mynull);
+ assert_false(nullptr < mynull);
+ assert_false(nullptr > mynull);
+ assert_true(nullptr <= mynull);
+ assert_true(nullptr >= mynull);
+
+ assert_true(mynull == mynull);
+ assert_false(mynull != mynull);
+ assert_false(mynull < mynull);
+ assert_false(mynull > mynull);
+ assert_true(mynull <= mynull);
+ assert_true(mynull >= mynull);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr12.C
new file mode 100644
index 0000000..4397082
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr12.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+// Test sizeof
+
+static_assert(sizeof(nullptr) == sizeof(void*), "sizeof(nullptr) is wrong");
+const decltype(nullptr) mynull = 0;
+static_assert(sizeof(mynull) == sizeof(void*), "sizeof(nullptr) is wrong");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr13.C
new file mode 100644
index 0000000..e788c16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr13.C
@@ -0,0 +1,12 @@
+// { dg-do run { target c++11 } }
+
+// Test typeid
+
+#include <typeinfo>
+
+int main()
+{
+ const decltype(nullptr) mynull = 0;
+ if (typeid(nullptr) != typeid(mynull))
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr14.C
new file mode 100644
index 0000000..6a79c49
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr14.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+
+// Test overload preference char*/int
+
+template <typename T, typename U> struct tType_equal;
+template <typename T> struct tType_equal<T, T> { typedef void type; };
+
+template <typename T, typename U>
+inline typename tType_equal<T, U>::type
+type_equal(U) { }
+
+char* f( char* );
+int f( int );
+long int f( long int );
+
+void test_f()
+{
+ // Overloading cases
+ //
+ type_equal<char*>(f(nullptr));
+ type_equal<int>(f(0));
+ decltype(nullptr) mynull = 0;
+ type_equal<char*>(f(mynull));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr15.C
new file mode 100644
index 0000000..939d449
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr15.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+
+
+// Test template deduction
+
+template <typename T, typename U> struct tType_equal;
+template <typename T> struct tType_equal<T, T> { typedef void type; };
+
+template <typename T, typename U>
+inline typename tType_equal<T, U>::type
+type_equal(U) { }
+
+template<typename T> T* g( T* t ); // { dg-message "note" }
+
+void test_g()
+{
+ // Deduction to nullptr_t, no deduction to pointer type
+ //
+ g(nullptr); // { dg-error "no matching function for call to " }
+ // { dg-message "(candidate|mismatched types)" "candidate note" { target *-*-* } 19 }
+ type_equal<float*>(g((float*)nullptr));
+ decltype(nullptr) mynull = 0;
+ g(mynull); // { dg-error "no matching function for call to " }
+ // { dg-message "(candidate|mismatched types)" "candidate note" { target *-*-* } 23 }
+ type_equal<float*>(g((float*)mynull));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr16.C
new file mode 100644
index 0000000..62029b3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr16.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+
+// Test template deduction
+
+typedef decltype(nullptr) nullptr_t;
+
+template <typename T, typename U> struct tType_equal;
+template <typename T> struct tType_equal<T, T> { typedef void type; };
+
+template <typename T, typename U>
+inline typename tType_equal<T, U>::type
+type_equal(U) { }
+
+template<typename T> T h( T t );
+
+void test_h()
+{
+ type_equal<int>(h(0));
+ type_equal<nullptr_t>(h(nullptr));
+ type_equal<float*>(h((float*)nullptr));
+ nullptr_t mynull = 0;
+ type_equal<nullptr_t>(h(mynull));
+ type_equal<float*>(h((float*)mynull));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr17.C
new file mode 100644
index 0000000..96fea44
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr17.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+
+// Test that bool is a better overload match than int
+
+template <typename T, typename U> struct tType_equal;
+template <typename T> struct tType_equal<T, T> { typedef void type; };
+
+template <typename T, typename U>
+inline typename tType_equal<T, U>::type
+type_equal(U) { }
+
+int i( int );
+long int i( long int );
+bool i( bool );
+
+void test_i()
+{
+ // Overload to bool, not int
+ type_equal<bool>(i(nullptr));
+ decltype(nullptr) mynull = 0;
+ type_equal<bool>(i(mynull));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr18.C
new file mode 100644
index 0000000..17dd62c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr18.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+// Test overload of pointer versus bool when applied on a nullptr_t
+
+template <typename T, typename U> struct tType_equal;
+template <typename T> struct tType_equal<T, T> { typedef void type; };
+
+template <typename T, typename U>
+inline typename tType_equal<T, U>::type
+type_equal(U) { }
+
+char* j( char* );
+bool j( bool );
+
+void test_j()
+{
+ type_equal<char*>(j(nullptr));
+ decltype(nullptr) mynull = 0;
+ type_equal<char*>(j(mynull));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr19.C
new file mode 100644
index 0000000..8b6a0b4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr19.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+
+// Test overload of pointer versus nullptr_t when applied on a literal 0/__null
+
+typedef decltype(nullptr) nullptr_t;
+
+char* k( char* ); /* { dg-message "note" } */
+nullptr_t k( nullptr_t ); /* { dg-message "note" } */
+
+void test_k()
+{
+ k(0); /* { dg-error "is ambiguous" } */
+ // { dg-message "candidate" "candidate note" { target *-*-* } 13 }
+ k(__null); /* { dg-error "is ambiguous" } */
+ // { dg-message "candidate" "candidate note" { target *-*-* } 15 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr20.C
new file mode 100644
index 0000000..bbd0c7e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr20.C
@@ -0,0 +1,19 @@
+// { dg-do run { target c++11 } }
+
+// Test passing to ellipisis
+
+#include <cstdio>
+#include <cstring>
+
+int main()
+{
+ char buf1[64];
+ char buf2[64];
+ char buf3[64];
+
+ std::sprintf(buf1, "%p", (void*)0);
+ std::sprintf(buf2, "%p", nullptr);
+ decltype(nullptr) mynull = 0;
+ std::sprintf(buf3, "%p", nullptr);
+ return std::strcmp(buf1, buf2) != 0 || std::strcmp(buf1, buf3) != 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
new file mode 100644
index 0000000..89884b9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
@@ -0,0 +1,54 @@
+// { dg-do run { target c++11 } }
+
+// Test throw and catch
+
+extern "C" void abort (void);
+
+typedef decltype(nullptr) nullptr_t;
+
+int result[2];
+
+void __attribute__((noinline))
+foo (int i, int j)
+{
+ result[i] = j;
+}
+
+int main()
+{
+ try {
+ throw nullptr;
+ } catch (void*) {
+ foo (0, 1);
+ } catch (bool) {
+ foo (0, 2);
+ } catch (int) {
+ foo (0, 3);
+ } catch (long int) {
+ foo (0, 4);
+ } catch (nullptr_t) {
+ foo (0, 5);
+ } catch (...) {
+ foo (0, 6);
+ }
+
+ nullptr_t mynull = 0;
+ try {
+ throw mynull;
+ } catch (void*) {
+ foo (1, 1);
+ } catch (bool) {
+ foo (1, 2);
+ } catch (int) {
+ foo (1, 3);
+ } catch (long int) {
+ foo (1, 4);
+ } catch (nullptr_t) {
+ foo (1, 5);
+ } catch (...) {
+ foo (1, 6);
+ }
+
+ if (result[0] != 5 || result[1] != 5)
+ abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr22.C
new file mode 100644
index 0000000..5fbd124
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr22.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall -Wformat=2 -Wstrict-null-sentinel" }
+
+// Test various warnings
+
+void f1(const char*, ...) __attribute__((format(printf, 1, 2)));
+void f2(const char*) __attribute__((nonnull));
+void f3(const char*, ...) __attribute__((sentinel));
+
+void f()
+{
+ f1("%p", nullptr);
+ f2(nullptr); // { dg-warning "null argument where non-null required " }
+ f3("x", "y", __null); // { dg-warning "missing sentinel in function call" }
+ f3("x", "y", nullptr);
+ decltype(nullptr) mynull = 0;
+ f1("%p", mynull);
+ f2(mynull); // { dg-warning "null argument where non-null required " }
+ f3("x", "y", mynull);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr23.C
new file mode 100644
index 0000000..2fab690
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr23.C
@@ -0,0 +1,24 @@
+// PR c++/50361
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct Foo
+{
+ Foo(std::initializer_list<Foo>) { };
+
+ template<class T> Foo(T t) { T u(t); }
+
+private:
+ union Data
+ {
+ Data() : null(nullptr) {}
+
+ std::nullptr_t null;
+ } u_;
+};
+
+int main()
+{
+ Foo f = { {} };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr24.C
new file mode 100644
index 0000000..de0c842
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr24.C
@@ -0,0 +1,5 @@
+// PR c++/50371
+// { dg-do compile { target c++11 } }
+
+template<decltype(nullptr)>
+struct nt;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr25.C
new file mode 100644
index 0000000..a87a923
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr25.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+template<decltype(nullptr)>
+struct nt{};
+
+nt<nullptr> x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr26.C
new file mode 100644
index 0000000..f60fae0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr26.C
@@ -0,0 +1,13 @@
+// PR c++/51530
+// { dg-do compile { target c++11 } }
+
+template <class T, class U>
+void f(T, U);
+
+template <class T>
+void f(T, decltype(nullptr));
+
+int main()
+{
+ f(1, nullptr);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr27.C
new file mode 100644
index 0000000..2510dc8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr27.C
@@ -0,0 +1,9 @@
+// PR c++/52706
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=0" }
+// { dg-final { scan-assembler "_Z1fIDnLDn0EEiT_" } }
+
+template<class T, decltype(nullptr) = nullptr>
+int f(T);
+
+int i2 = f(nullptr); // 17
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr28.C
new file mode 100644
index 0000000..05fbe57
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr28.C
@@ -0,0 +1,16 @@
+// { dg-do run { target c++11 } }
+
+typedef decltype(nullptr) nullptr_t;
+
+int i;
+nullptr_t n;
+const nullptr_t& f() { ++i; return n; }
+
+nullptr_t g() { return f(); }
+
+int main()
+{
+ g();
+ if (i != 1)
+ __builtin_abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr29.C
new file mode 100644
index 0000000..d2325bb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr29.C
@@ -0,0 +1,5 @@
+// PR c++/53882
+// { dg-options "-O" }
+// { dg-do compile { target c++11 } }
+
+void f(decltype(nullptr) &__restrict np) { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr30.C
new file mode 100644
index 0000000..3673999
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/nullptr30.C
@@ -0,0 +1,40 @@
+// PR c++/58176
+// { dg-do compile { target c++11 } }
+
+// Nil
+struct nil_ { constexpr nil_ () {} };
+constexpr nil_ nil;
+
+// Cons
+template <class H, class T = nil_>
+struct cons_ {
+ using head_ = H;
+ using tail_ = T;
+
+ H head;
+ T tail;
+
+ constexpr cons_() {}
+ constexpr cons_(H const &h, T const &t) : head(h), tail(t) {}
+};
+template <class H, class T = nil_>
+constexpr cons_<H, T> cons (H const &h, T const &t = nil) { return
+cons_<H,T>(h,t); }
+
+// List
+template <class... T> struct list_s;
+template <class H, class... T>
+struct list_s<H, T...> {
+ using type = cons_<H, typename list_s<T...>::type>;
+};
+template <>
+struct list_s<> {
+ using type = nil_;
+};
+template <class... T>
+using list_ = typename list_s<T...>::type;
+constexpr nil_ list () { return nil; }
+template <class H, class... T>
+constexpr list_<H, T...> list (H h, T... t) { return cons(h, list(t...)); }
+
+constexpr auto l1 = list("monkey", 123.4, cons(1, 2), nullptr);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overflow1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overflow1.C
new file mode 100644
index 0000000..b8591b4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overflow1.C
@@ -0,0 +1,25 @@
+// { dg-prune-output "-Woverflow" }
+
+template <long long i>
+struct Fib
+{
+ static const long long value // { dg-error "overflow" }
+ = Fib<i-1>::value + Fib<i-2>::value;
+};
+
+template <>
+struct Fib<0>
+{
+ static const long long value = 0;
+};
+
+template <>
+struct Fib<1>
+{
+ static const long long value = 1;
+};
+
+int main()
+{
+ return Fib<95>::value;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C
new file mode 100644
index 0000000..5817ad5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-1.C
@@ -0,0 +1,28 @@
+// { dg-do link { target c++11 } }
+
+struct S {};
+
+struct T
+{
+ operator S() { return S(); }
+};
+
+struct U
+{
+ operator S&() { return *static_cast<S*>(0); }
+};
+
+void f(const S&);
+void f(S&&) {}
+
+void g(const S&) {}
+void g(S&&);
+
+int main()
+{
+ T t;
+ f(t);
+
+ U u;
+ g(u);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C
new file mode 100644
index 0000000..b95994d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload-conv-2.C
@@ -0,0 +1,16 @@
+// { dg-do link { target c++11 } }
+
+struct T {};
+struct S
+{
+ S(T const &) {}
+};
+
+void f(const S&);
+void f(S&&) {}
+
+int main()
+{
+ T t;
+ f(t);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload.C
new file mode 100644
index 0000000..a52e7c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload.C
@@ -0,0 +1,707 @@
+// { dg-do link { target c++11 } }
+// Generated by overload.py
+
+template<typename _Tp>
+inline _Tp&&
+movel(_Tp& __t)
+{ return static_cast<_Tp&&>(__t); }
+
+struct S{};
+
+S l; // lvalue (l)
+S const cl = l; // const lvalue (cl)
+S r() { return l; } // rvalue (r)
+S const cr() { return l; } // const rvalue (cr)
+S & nl = l; // named lvalue reference (nl)
+S const & ncl = l; // named const lvalue reference (ncl)
+S && nr = movel(l); // named rvalue reference (nr)
+S const && ncr = movel(l); // named const rvalue reference (ncr)
+S & ul() { return l; } // unnamed lvalue reference (ul)
+S const & ucl() { return l; } // unnamed const lvalue reference (ucl)
+S && ur() { return movel(l); } // unnamed rvalue reference (ur)
+S const && ucr() { return movel(l); } // unnamed const rvalue reference (ucr)
+
+void l0001(const S&&) {}
+
+void l0010(S&&) {}
+
+void l0011(S&&) {}
+void l0011(const S&&);
+
+void l0100(const S&) {}
+
+void l0101(const S&) {}
+void l0101(const S&&);
+
+void l0110(const S&) {}
+void l0110(S&&);
+
+void l0111(const S&) {}
+void l0111(S&&);
+void l0111(const S&&);
+
+void l1000(S&) {}
+
+void l1001(S&) {}
+void l1001(const S&&);
+
+void l1010(S&) {}
+void l1010(S&&);
+
+void l1011(S&) {}
+void l1011(S&&);
+void l1011(const S&&);
+
+void l1100(S&) {}
+void l1100(const S&);
+
+void l1101(S&) {}
+void l1101(const S&);
+void l1101(const S&&);
+
+void l1110(S&) {}
+void l1110(const S&);
+void l1110(S&&);
+
+void l1111(S&) {}
+void l1111(const S&);
+void l1111(S&&);
+void l1111(const S&&);
+
+void cl0001(const S&&) {}
+
+void cl0011(S&&);
+void cl0011(const S&&) {}
+
+void cl0100(const S&) {}
+
+void cl0101(const S&) {}
+void cl0101(const S&&);
+
+void cl0110(const S&) {}
+void cl0110(S&&);
+
+void cl0111(const S&) {}
+void cl0111(S&&);
+void cl0111(const S&&);
+
+void cl1001(S&);
+void cl1001(const S&&) {}
+
+void cl1011(S&);
+void cl1011(S&&);
+void cl1011(const S&&) {}
+
+void cl1100(S&);
+void cl1100(const S&) {}
+
+void cl1101(S&);
+void cl1101(const S&) {}
+void cl1101(const S&&);
+
+void cl1110(S&);
+void cl1110(const S&) {}
+void cl1110(S&&);
+
+void cl1111(S&);
+void cl1111(const S&) {}
+void cl1111(S&&);
+void cl1111(const S&&);
+
+void r0001(const S&&) {}
+
+void r0010(S&&) {}
+
+void r0011(S&&) {}
+void r0011(const S&&);
+
+void r0100(const S&) {}
+
+void r0101(const S&);
+void r0101(const S&&) {}
+
+void r0110(const S&);
+void r0110(S&&) {}
+
+void r0111(const S&);
+void r0111(S&&) {}
+void r0111(const S&&);
+
+void r1001(S&);
+void r1001(const S&&) {}
+
+void r1010(S&);
+void r1010(S&&) {}
+
+void r1011(S&);
+void r1011(S&&) {}
+void r1011(const S&&);
+
+void r1100(S&);
+void r1100(const S&) {}
+
+void r1101(S&);
+void r1101(const S&);
+void r1101(const S&&) {}
+
+void r1110(S&);
+void r1110(const S&);
+void r1110(S&&) {}
+
+void r1111(S&);
+void r1111(const S&);
+void r1111(S&&) {}
+void r1111(const S&&);
+
+void cr0001(const S&&) {}
+
+void cr0011(S&&);
+void cr0011(const S&&) {}
+
+void cr0100(const S&) {}
+
+void cr0101(const S&);
+void cr0101(const S&&) {}
+
+void cr0110(const S&) {}
+void cr0110(S&&);
+
+void cr0111(const S&);
+void cr0111(S&&);
+void cr0111(const S&&) {}
+
+void cr1001(S&);
+void cr1001(const S&&) {}
+
+void cr1011(S&);
+void cr1011(S&&);
+void cr1011(const S&&) {}
+
+void cr1100(S&);
+void cr1100(const S&) {}
+
+void cr1101(S&);
+void cr1101(const S&);
+void cr1101(const S&&) {}
+
+void cr1110(S&);
+void cr1110(const S&) {}
+void cr1110(S&&);
+
+void cr1111(S&);
+void cr1111(const S&);
+void cr1111(S&&);
+void cr1111(const S&&) {}
+
+void nl0001(const S&&) {}
+
+void nl0010(S&&) {}
+
+void nl0011(S&&) {}
+void nl0011(const S&&);
+
+void nl0100(const S&) {}
+
+void nl0101(const S&) {}
+void nl0101(const S&&);
+
+void nl0110(const S&) {}
+void nl0110(S&&);
+
+void nl0111(const S&) {}
+void nl0111(S&&);
+void nl0111(const S&&);
+
+void nl1000(S&) {}
+
+void nl1001(S&) {}
+void nl1001(const S&&);
+
+void nl1010(S&) {}
+void nl1010(S&&);
+
+void nl1011(S&) {}
+void nl1011(S&&);
+void nl1011(const S&&);
+
+void nl1100(S&) {}
+void nl1100(const S&);
+
+void nl1101(S&) {}
+void nl1101(const S&);
+void nl1101(const S&&);
+
+void nl1110(S&) {}
+void nl1110(const S&);
+void nl1110(S&&);
+
+void nl1111(S&) {}
+void nl1111(const S&);
+void nl1111(S&&);
+void nl1111(const S&&);
+
+void ncl0001(const S&&) {}
+
+void ncl0011(S&&);
+void ncl0011(const S&&) {}
+
+void ncl0100(const S&) {}
+
+void ncl0101(const S&) {}
+void ncl0101(const S&&);
+
+void ncl0110(const S&) {}
+void ncl0110(S&&);
+
+void ncl0111(const S&) {}
+void ncl0111(S&&);
+void ncl0111(const S&&);
+
+void ncl1001(S&);
+void ncl1001(const S&&) {}
+
+void ncl1011(S&);
+void ncl1011(S&&);
+void ncl1011(const S&&) {}
+
+void ncl1100(S&);
+void ncl1100(const S&) {}
+
+void ncl1101(S&);
+void ncl1101(const S&) {}
+void ncl1101(const S&&);
+
+void ncl1110(S&);
+void ncl1110(const S&) {}
+void ncl1110(S&&);
+
+void ncl1111(S&);
+void ncl1111(const S&) {}
+void ncl1111(S&&);
+void ncl1111(const S&&);
+
+void nr0001(const S&&) {}
+
+void nr0010(S&&) {}
+
+void nr0011(S&&) {}
+void nr0011(const S&&);
+
+void nr0100(const S&) {}
+
+void nr0101(const S&) {}
+void nr0101(const S&&);
+
+void nr0110(const S&) {}
+void nr0110(S&&);
+
+void nr0111(const S&) {}
+void nr0111(S&&);
+void nr0111(const S&&);
+
+void nr1000(S&) {}
+
+void nr1001(S&) {}
+void nr1001(const S&&);
+
+void nr1010(S&) {}
+void nr1010(S&&);
+
+void nr1011(S&) {}
+void nr1011(S&&);
+void nr1011(const S&&);
+
+void nr1100(S&) {}
+void nr1100(const S&);
+
+void nr1101(S&) {}
+void nr1101(const S&);
+void nr1101(const S&&);
+
+void nr1110(S&) {}
+void nr1110(const S&);
+void nr1110(S&&);
+
+void nr1111(S&) {}
+void nr1111(const S&);
+void nr1111(S&&);
+void nr1111(const S&&);
+
+void ncr0001(const S&&) {}
+
+void ncr0011(S&&);
+void ncr0011(const S&&) {}
+
+void ncr0100(const S&) {}
+
+void ncr0101(const S&) {}
+void ncr0101(const S&&);
+
+void ncr0110(const S&) {}
+void ncr0110(S&&);
+
+void ncr0111(const S&) {}
+void ncr0111(S&&);
+void ncr0111(const S&&);
+
+void ncr1001(S&);
+void ncr1001(const S&&) {}
+
+void ncr1011(S&);
+void ncr1011(S&&);
+void ncr1011(const S&&) {}
+
+void ncr1100(S&);
+void ncr1100(const S&) {}
+
+void ncr1101(S&);
+void ncr1101(const S&) {}
+void ncr1101(const S&&);
+
+void ncr1110(S&);
+void ncr1110(const S&) {}
+void ncr1110(S&&);
+
+void ncr1111(S&);
+void ncr1111(const S&) {}
+void ncr1111(S&&);
+void ncr1111(const S&&);
+
+void ul0001(const S&&) {}
+
+void ul0010(S&&) {}
+
+void ul0011(S&&) {}
+void ul0011(const S&&);
+
+void ul0100(const S&) {}
+
+void ul0101(const S&) {}
+void ul0101(const S&&);
+
+void ul0110(const S&) {}
+void ul0110(S&&);
+
+void ul0111(const S&) {}
+void ul0111(S&&);
+void ul0111(const S&&);
+
+void ul1000(S&) {}
+
+void ul1001(S&) {}
+void ul1001(const S&&);
+
+void ul1010(S&) {}
+void ul1010(S&&);
+
+void ul1011(S&) {}
+void ul1011(S&&);
+void ul1011(const S&&);
+
+void ul1100(S&) {}
+void ul1100(const S&);
+
+void ul1101(S&) {}
+void ul1101(const S&);
+void ul1101(const S&&);
+
+void ul1110(S&) {}
+void ul1110(const S&);
+void ul1110(S&&);
+
+void ul1111(S&) {}
+void ul1111(const S&);
+void ul1111(S&&);
+void ul1111(const S&&);
+
+void ucl0001(const S&&) {}
+
+void ucl0011(S&&);
+void ucl0011(const S&&) {}
+
+void ucl0100(const S&) {}
+
+void ucl0101(const S&) {}
+void ucl0101(const S&&);
+
+void ucl0110(const S&) {}
+void ucl0110(S&&);
+
+void ucl0111(const S&) {}
+void ucl0111(S&&);
+void ucl0111(const S&&);
+
+void ucl1001(S&);
+void ucl1001(const S&&) {}
+
+void ucl1011(S&);
+void ucl1011(S&&);
+void ucl1011(const S&&) {}
+
+void ucl1100(S&);
+void ucl1100(const S&) {}
+
+void ucl1101(S&);
+void ucl1101(const S&) {}
+void ucl1101(const S&&);
+
+void ucl1110(S&);
+void ucl1110(const S&) {}
+void ucl1110(S&&);
+
+void ucl1111(S&);
+void ucl1111(const S&) {}
+void ucl1111(S&&);
+void ucl1111(const S&&);
+
+void ur0001(const S&&) {}
+
+void ur0010(S&&) {}
+
+void ur0011(S&&) {}
+void ur0011(const S&&);
+
+void ur0100(const S&) {}
+
+void ur0101(const S&);
+void ur0101(const S&&) {}
+
+void ur0110(const S&);
+void ur0110(S&&) {}
+
+void ur0111(const S&);
+void ur0111(S&&) {}
+void ur0111(const S&&);
+
+void ur1001(S&);
+void ur1001(const S&&) {}
+
+void ur1010(S&);
+void ur1010(S&&) {}
+
+void ur1011(S&);
+void ur1011(S&&) {}
+void ur1011(const S&&);
+
+void ur1100(S&);
+void ur1100(const S&) {}
+
+void ur1101(S&);
+void ur1101(const S&);
+void ur1101(const S&&) {}
+
+void ur1110(S&);
+void ur1110(const S&);
+void ur1110(S&&) {}
+
+void ur1111(S&);
+void ur1111(const S&);
+void ur1111(S&&) {}
+void ur1111(const S&&);
+
+void ucr0001(const S&&) {}
+
+void ucr0011(S&&);
+void ucr0011(const S&&) {}
+
+void ucr0100(const S&) {}
+
+void ucr0101(const S&);
+void ucr0101(const S&&) {}
+
+void ucr0110(const S&) {}
+void ucr0110(S&&);
+
+void ucr0111(const S&);
+void ucr0111(S&&);
+void ucr0111(const S&&) {}
+
+void ucr1001(S&);
+void ucr1001(const S&&) {}
+
+void ucr1011(S&);
+void ucr1011(S&&);
+void ucr1011(const S&&) {}
+
+void ucr1100(S&);
+void ucr1100(const S&) {}
+
+void ucr1101(S&);
+void ucr1101(const S&);
+void ucr1101(const S&&) {}
+
+void ucr1110(S&);
+void ucr1110(const S&) {}
+void ucr1110(S&&);
+
+void ucr1111(S&);
+void ucr1111(const S&);
+void ucr1111(S&&);
+void ucr1111(const S&&) {}
+
+
+int main()
+{
+ //l0001(l);
+ //l0010(l);
+ //l0011(l);
+ l0100(l);
+ l0101(l);
+ l0110(l);
+ l0111(l);
+ l1000(l);
+ l1001(l);
+ l1010(l);
+ l1011(l);
+ l1100(l);
+ l1101(l);
+ l1110(l);
+ l1111(l);
+ //cl0001(cl);
+ //cl0011(cl);
+ cl0100(cl);
+ cl0101(cl);
+ cl0110(cl);
+ cl0111(cl);
+ //cl1001(cl);
+ //cl1011(cl);
+ cl1100(cl);
+ cl1101(cl);
+ cl1110(cl);
+ cl1111(cl);
+ r0001(r());
+ r0010(r());
+ r0011(r());
+ r0100(r());
+ r0101(r());
+ r0110(r());
+ r0111(r());
+ r1001(r());
+ r1010(r());
+ r1011(r());
+ r1100(r());
+ r1101(r());
+ r1110(r());
+ r1111(r());
+ cr0001(cr());
+ cr0011(cr());
+ cr0100(cr());
+ cr0101(cr());
+ cr0110(cr());
+ cr0111(cr());
+ cr1001(cr());
+ cr1011(cr());
+ cr1100(cr());
+ cr1101(cr());
+ cr1110(cr());
+ cr1111(cr());
+ //nl0001(nl);
+ //nl0010(nl);
+ //nl0011(nl);
+ nl0100(nl);
+ nl0101(nl);
+ nl0110(nl);
+ nl0111(nl);
+ nl1000(nl);
+ nl1001(nl);
+ nl1010(nl);
+ nl1011(nl);
+ nl1100(nl);
+ nl1101(nl);
+ nl1110(nl);
+ nl1111(nl);
+ //ncl0001(ncl);
+ //ncl0011(ncl);
+ ncl0100(ncl);
+ ncl0101(ncl);
+ ncl0110(ncl);
+ ncl0111(ncl);
+ //ncl1001(ncl);
+ //ncl1011(ncl);
+ ncl1100(ncl);
+ ncl1101(ncl);
+ ncl1110(ncl);
+ ncl1111(ncl);
+ //nr0001(nr);
+ //nr0010(nr);
+ //nr0011(nr);
+ nr0100(nr);
+ nr0101(nr);
+ nr0110(nr);
+ nr0111(nr);
+ nr1000(nr);
+ nr1001(nr);
+ nr1010(nr);
+ nr1011(nr);
+ nr1100(nr);
+ nr1101(nr);
+ nr1110(nr);
+ nr1111(nr);
+ //ncr0001(ncr);
+ //ncr0011(ncr);
+ ncr0100(ncr);
+ ncr0101(ncr);
+ ncr0110(ncr);
+ ncr0111(ncr);
+ //ncr1001(ncr);
+ //ncr1011(ncr);
+ ncr1100(ncr);
+ ncr1101(ncr);
+ ncr1110(ncr);
+ ncr1111(ncr);
+ //ul0001(ul());
+ //ul0010(ul());
+ //ul0011(ul());
+ ul0100(ul());
+ ul0101(ul());
+ ul0110(ul());
+ ul0111(ul());
+ ul1000(ul());
+ ul1001(ul());
+ ul1010(ul());
+ ul1011(ul());
+ ul1100(ul());
+ ul1101(ul());
+ ul1110(ul());
+ ul1111(ul());
+ //ucl0001(ucl());
+ //ucl0011(ucl());
+ ucl0100(ucl());
+ ucl0101(ucl());
+ ucl0110(ucl());
+ ucl0111(ucl());
+ //ucl1001(ucl());
+ //ucl1011(ucl());
+ ucl1100(ucl());
+ ucl1101(ucl());
+ ucl1110(ucl());
+ ucl1111(ucl());
+ ur0001(ur());
+ ur0010(ur());
+ ur0011(ur());
+ ur0100(ur());
+ ur0101(ur());
+ ur0110(ur());
+ ur0111(ur());
+ ur1001(ur());
+ ur1010(ur());
+ ur1011(ur());
+ ur1100(ur());
+ ur1101(ur());
+ ur1110(ur());
+ ur1111(ur());
+ ucr0001(ucr());
+ ucr0011(ucr());
+ ucr0100(ucr());
+ ucr0101(ucr());
+ ucr0110(ucr());
+ ucr0111(ucr());
+ ucr1001(ucr());
+ ucr1011(ucr());
+ ucr1100(ucr());
+ ucr1101(ucr());
+ ucr1110(ucr());
+ ucr1111(ucr());
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload2.C
new file mode 100644
index 0000000..2779f6d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload2.C
@@ -0,0 +1,24 @@
+// Core 1321
+// { dg-do compile { target c++11 } }
+// Two dependent names are equivalent even if the overload sets found by
+// phase 1 lookup are different. Merging them keeps the earlier set.
+
+int g1(int);
+template <class T> decltype(g1(T())) f1();
+int g1();
+template <class T> decltype(g1(T())) f1()
+{ return g1(T()); }
+int i1 = f1<int>(); // OK, g1(int) was declared before the first f1
+
+template <class T> decltype(g2(T())) f2(); // { dg-error "g2. was not declared" }
+int g2(int);
+template <class T> decltype(g2(T())) f2()
+{ return g2(T()); }
+int i2 = f2<int>(); // { dg-error "no match" }
+
+int g3();
+template <class T> decltype(g3(T())) f3(); // { dg-error "too many arguments" }
+int g3(int);
+template <class T> decltype(g3(T())) f3()
+{ return g3(T()); }
+int i3 = f3<int>(); // { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload3.C
new file mode 100644
index 0000000..2d95783
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overload3.C
@@ -0,0 +1,17 @@
+// PR c++/59823
+// { dg-do compile { target c++11 } }
+
+struct X { };
+
+void f(X&&);
+
+struct wrap
+{
+ operator const X&() const;
+};
+
+int main()
+{
+ wrap w;
+ f(w); // { dg-error "lvalue" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overloadn.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overloadn.C
new file mode 100644
index 0000000..16c39a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/overloadn.C
@@ -0,0 +1,708 @@
+// { dg-do link { target c++11 } }
+// { dg-options "" }
+// Generated by overload.py
+
+template<typename _Tp>
+inline _Tp&&
+movel(_Tp& __t)
+{ return static_cast<_Tp&&>(__t); }
+
+struct S{};
+
+S l; // lvalue (l)
+S const cl = l; // const lvalue (cl)
+S r() { return l; } // rvalue (r)
+S const cr() { return l; } // const rvalue (cr)
+S & nl = l; // named lvalue reference (nl)
+S const & ncl = l; // named const lvalue reference (ncl)
+S && nr = movel(l); // named rvalue reference (nr)
+S const && ncr = movel(l); // named const rvalue reference (ncr)
+S & ul() { return l; } // unnamed lvalue reference (ul)
+S const & ucl() { return l; } // unnamed const lvalue reference (ucl)
+S && ur() { return movel(l); } // unnamed rvalue reference (ur)
+S const && ucr() { return movel(l); } // unnamed const rvalue reference (ucr)
+
+void l0001(const S&&) {} // { dg-message "" }
+
+void l0010(S&&) {} // { dg-message "" }
+
+void l0011(S&&) {} // { dg-message "" }
+void l0011(const S&&);
+
+void l0100(const S&) {}
+
+void l0101(const S&) {}
+void l0101(const S&&);
+
+void l0110(const S&) {}
+void l0110(S&&);
+
+void l0111(const S&) {}
+void l0111(S&&);
+void l0111(const S&&);
+
+void l1000(S&) {}
+
+void l1001(S&) {}
+void l1001(const S&&);
+
+void l1010(S&) {}
+void l1010(S&&);
+
+void l1011(S&) {}
+void l1011(S&&);
+void l1011(const S&&);
+
+void l1100(S&) {}
+void l1100(const S&);
+
+void l1101(S&) {}
+void l1101(const S&);
+void l1101(const S&&);
+
+void l1110(S&) {}
+void l1110(const S&);
+void l1110(S&&);
+
+void l1111(S&) {}
+void l1111(const S&);
+void l1111(S&&);
+void l1111(const S&&);
+
+void cl0001(const S&&) {} // { dg-message "" }
+
+void cl0011(S&&);
+void cl0011(const S&&) {} // { dg-message "" }
+
+void cl0100(const S&) {}
+
+void cl0101(const S&) {}
+void cl0101(const S&&);
+
+void cl0110(const S&) {}
+void cl0110(S&&);
+
+void cl0111(const S&) {}
+void cl0111(S&&);
+void cl0111(const S&&);
+
+void cl1001(S&);
+void cl1001(const S&&) {} // { dg-message "" }
+
+void cl1011(S&);
+void cl1011(S&&);
+void cl1011(const S&&) {} // { dg-message "" }
+
+void cl1100(S&);
+void cl1100(const S&) {}
+
+void cl1101(S&);
+void cl1101(const S&) {}
+void cl1101(const S&&);
+
+void cl1110(S&);
+void cl1110(const S&) {}
+void cl1110(S&&);
+
+void cl1111(S&);
+void cl1111(const S&) {}
+void cl1111(S&&);
+void cl1111(const S&&);
+
+void r0001(const S&&) {}
+
+void r0010(S&&) {}
+
+void r0011(S&&) {}
+void r0011(const S&&);
+
+void r0100(const S&) {}
+
+void r0101(const S&);
+void r0101(const S&&) {}
+
+void r0110(const S&);
+void r0110(S&&) {}
+
+void r0111(const S&);
+void r0111(S&&) {}
+void r0111(const S&&);
+
+void r1001(S&);
+void r1001(const S&&) {}
+
+void r1010(S&);
+void r1010(S&&) {}
+
+void r1011(S&);
+void r1011(S&&) {}
+void r1011(const S&&);
+
+void r1100(S&);
+void r1100(const S&) {}
+
+void r1101(S&);
+void r1101(const S&);
+void r1101(const S&&) {}
+
+void r1110(S&);
+void r1110(const S&);
+void r1110(S&&) {}
+
+void r1111(S&);
+void r1111(const S&);
+void r1111(S&&) {}
+void r1111(const S&&);
+
+void cr0001(const S&&) {}
+
+void cr0011(S&&);
+void cr0011(const S&&) {}
+
+void cr0100(const S&) {}
+
+void cr0101(const S&);
+void cr0101(const S&&) {}
+
+void cr0110(const S&) {}
+void cr0110(S&&);
+
+void cr0111(const S&);
+void cr0111(S&&);
+void cr0111(const S&&) {}
+
+void cr1001(S&);
+void cr1001(const S&&) {}
+
+void cr1011(S&);
+void cr1011(S&&);
+void cr1011(const S&&) {}
+
+void cr1100(S&);
+void cr1100(const S&) {}
+
+void cr1101(S&);
+void cr1101(const S&);
+void cr1101(const S&&) {}
+
+void cr1110(S&);
+void cr1110(const S&) {}
+void cr1110(S&&);
+
+void cr1111(S&);
+void cr1111(const S&);
+void cr1111(S&&);
+void cr1111(const S&&) {}
+
+void nl0001(const S&&) {} // { dg-message "" }
+
+void nl0010(S&&) {} // { dg-message "" }
+
+void nl0011(S&&) {} // { dg-message "" }
+void nl0011(const S&&);
+
+void nl0100(const S&) {}
+
+void nl0101(const S&) {}
+void nl0101(const S&&);
+
+void nl0110(const S&) {}
+void nl0110(S&&);
+
+void nl0111(const S&) {}
+void nl0111(S&&);
+void nl0111(const S&&);
+
+void nl1000(S&) {}
+
+void nl1001(S&) {}
+void nl1001(const S&&);
+
+void nl1010(S&) {}
+void nl1010(S&&);
+
+void nl1011(S&) {}
+void nl1011(S&&);
+void nl1011(const S&&);
+
+void nl1100(S&) {}
+void nl1100(const S&);
+
+void nl1101(S&) {}
+void nl1101(const S&);
+void nl1101(const S&&);
+
+void nl1110(S&) {}
+void nl1110(const S&);
+void nl1110(S&&);
+
+void nl1111(S&) {}
+void nl1111(const S&);
+void nl1111(S&&);
+void nl1111(const S&&);
+
+void ncl0001(const S&&) {} // { dg-message "" }
+
+void ncl0011(S&&);
+void ncl0011(const S&&) {} // { dg-message "" }
+
+void ncl0100(const S&) {}
+
+void ncl0101(const S&) {}
+void ncl0101(const S&&);
+
+void ncl0110(const S&) {}
+void ncl0110(S&&);
+
+void ncl0111(const S&) {}
+void ncl0111(S&&);
+void ncl0111(const S&&);
+
+void ncl1001(S&);
+void ncl1001(const S&&) {} // { dg-message "" }
+
+void ncl1011(S&);
+void ncl1011(S&&);
+void ncl1011(const S&&) {} // { dg-message "" }
+
+void ncl1100(S&);
+void ncl1100(const S&) {}
+
+void ncl1101(S&);
+void ncl1101(const S&) {}
+void ncl1101(const S&&);
+
+void ncl1110(S&);
+void ncl1110(const S&) {}
+void ncl1110(S&&);
+
+void ncl1111(S&);
+void ncl1111(const S&) {}
+void ncl1111(S&&);
+void ncl1111(const S&&);
+
+void nr0001(const S&&) {} // { dg-message "" }
+
+void nr0010(S&&) {} // { dg-message "" }
+
+void nr0011(S&&) {} // { dg-message "" }
+void nr0011(const S&&);
+
+void nr0100(const S&) {}
+
+void nr0101(const S&) {}
+void nr0101(const S&&);
+
+void nr0110(const S&) {}
+void nr0110(S&&);
+
+void nr0111(const S&) {}
+void nr0111(S&&);
+void nr0111(const S&&);
+
+void nr1000(S&) {}
+
+void nr1001(S&) {}
+void nr1001(const S&&);
+
+void nr1010(S&) {}
+void nr1010(S&&);
+
+void nr1011(S&) {}
+void nr1011(S&&);
+void nr1011(const S&&);
+
+void nr1100(S&) {}
+void nr1100(const S&);
+
+void nr1101(S&) {}
+void nr1101(const S&);
+void nr1101(const S&&);
+
+void nr1110(S&) {}
+void nr1110(const S&);
+void nr1110(S&&);
+
+void nr1111(S&) {}
+void nr1111(const S&);
+void nr1111(S&&);
+void nr1111(const S&&);
+
+void ncr0001(const S&&) {} // { dg-message "" }
+
+void ncr0011(S&&);
+void ncr0011(const S&&) {} // { dg-message "" }
+
+void ncr0100(const S&) {}
+
+void ncr0101(const S&) {}
+void ncr0101(const S&&);
+
+void ncr0110(const S&) {}
+void ncr0110(S&&);
+
+void ncr0111(const S&) {}
+void ncr0111(S&&);
+void ncr0111(const S&&);
+
+void ncr1001(S&);
+void ncr1001(const S&&) {} // { dg-message "" }
+
+void ncr1011(S&);
+void ncr1011(S&&);
+void ncr1011(const S&&) {} // { dg-message "" }
+
+void ncr1100(S&);
+void ncr1100(const S&) {}
+
+void ncr1101(S&);
+void ncr1101(const S&) {}
+void ncr1101(const S&&);
+
+void ncr1110(S&);
+void ncr1110(const S&) {}
+void ncr1110(S&&);
+
+void ncr1111(S&);
+void ncr1111(const S&) {}
+void ncr1111(S&&);
+void ncr1111(const S&&);
+
+void ul0001(const S&&) {} // { dg-message "" }
+
+void ul0010(S&&) {} // { dg-message "" }
+
+void ul0011(S&&) {} // { dg-message "" }
+void ul0011(const S&&);
+
+void ul0100(const S&) {}
+
+void ul0101(const S&) {}
+void ul0101(const S&&);
+
+void ul0110(const S&) {}
+void ul0110(S&&);
+
+void ul0111(const S&) {}
+void ul0111(S&&);
+void ul0111(const S&&);
+
+void ul1000(S&) {}
+
+void ul1001(S&) {}
+void ul1001(const S&&);
+
+void ul1010(S&) {}
+void ul1010(S&&);
+
+void ul1011(S&) {}
+void ul1011(S&&);
+void ul1011(const S&&);
+
+void ul1100(S&) {}
+void ul1100(const S&);
+
+void ul1101(S&) {}
+void ul1101(const S&);
+void ul1101(const S&&);
+
+void ul1110(S&) {}
+void ul1110(const S&);
+void ul1110(S&&);
+
+void ul1111(S&) {}
+void ul1111(const S&);
+void ul1111(S&&);
+void ul1111(const S&&);
+
+void ucl0001(const S&&) {} // { dg-message "" }
+
+void ucl0011(S&&);
+void ucl0011(const S&&) {} // { dg-message "" }
+
+void ucl0100(const S&) {}
+
+void ucl0101(const S&) {}
+void ucl0101(const S&&);
+
+void ucl0110(const S&) {}
+void ucl0110(S&&);
+
+void ucl0111(const S&) {}
+void ucl0111(S&&);
+void ucl0111(const S&&);
+
+void ucl1001(S&);
+void ucl1001(const S&&) {} // { dg-message "" }
+
+void ucl1011(S&);
+void ucl1011(S&&);
+void ucl1011(const S&&) {} // { dg-message "" }
+
+void ucl1100(S&);
+void ucl1100(const S&) {}
+
+void ucl1101(S&);
+void ucl1101(const S&) {}
+void ucl1101(const S&&);
+
+void ucl1110(S&);
+void ucl1110(const S&) {}
+void ucl1110(S&&);
+
+void ucl1111(S&);
+void ucl1111(const S&) {}
+void ucl1111(S&&);
+void ucl1111(const S&&);
+
+void ur0001(const S&&) {}
+
+void ur0010(S&&) {}
+
+void ur0011(S&&) {}
+void ur0011(const S&&);
+
+void ur0100(const S&) {}
+
+void ur0101(const S&);
+void ur0101(const S&&) {}
+
+void ur0110(const S&);
+void ur0110(S&&) {}
+
+void ur0111(const S&);
+void ur0111(S&&) {}
+void ur0111(const S&&);
+
+void ur1001(S&);
+void ur1001(const S&&) {}
+
+void ur1010(S&);
+void ur1010(S&&) {}
+
+void ur1011(S&);
+void ur1011(S&&) {}
+void ur1011(const S&&);
+
+void ur1100(S&);
+void ur1100(const S&) {}
+
+void ur1101(S&);
+void ur1101(const S&);
+void ur1101(const S&&) {}
+
+void ur1110(S&);
+void ur1110(const S&);
+void ur1110(S&&) {}
+
+void ur1111(S&);
+void ur1111(const S&);
+void ur1111(S&&) {}
+void ur1111(const S&&);
+
+void ucr0001(const S&&) {}
+
+void ucr0011(S&&);
+void ucr0011(const S&&) {}
+
+void ucr0100(const S&) {}
+
+void ucr0101(const S&);
+void ucr0101(const S&&) {}
+
+void ucr0110(const S&) {}
+void ucr0110(S&&);
+
+void ucr0111(const S&);
+void ucr0111(S&&);
+void ucr0111(const S&&) {}
+
+void ucr1001(S&);
+void ucr1001(const S&&) {}
+
+void ucr1011(S&);
+void ucr1011(S&&);
+void ucr1011(const S&&) {}
+
+void ucr1100(S&);
+void ucr1100(const S&) {}
+
+void ucr1101(S&);
+void ucr1101(const S&);
+void ucr1101(const S&&) {}
+
+void ucr1110(S&);
+void ucr1110(const S&) {}
+void ucr1110(S&&);
+
+void ucr1111(S&);
+void ucr1111(const S&);
+void ucr1111(S&&);
+void ucr1111(const S&&) {}
+
+
+int main()
+{
+ l0001(l); // { dg-error "lvalue" }
+ l0010(l); // { dg-error "lvalue" }
+ l0011(l); // { dg-error "lvalue" }
+ l0100(l);
+ l0101(l);
+ l0110(l);
+ l0111(l);
+ l1000(l);
+ l1001(l);
+ l1010(l);
+ l1011(l);
+ l1100(l);
+ l1101(l);
+ l1110(l);
+ l1111(l);
+ cl0001(cl); // { dg-error "lvalue" }
+ cl0011(cl); // { dg-error "lvalue" }
+ cl0100(cl);
+ cl0101(cl);
+ cl0110(cl);
+ cl0111(cl);
+ cl1001(cl); // { dg-error "lvalue" }
+ cl1011(cl); // { dg-error "lvalue" }
+ cl1100(cl);
+ cl1101(cl);
+ cl1110(cl);
+ cl1111(cl);
+ r0001(r());
+ r0010(r());
+ r0011(r());
+ r0100(r());
+ r0101(r());
+ r0110(r());
+ r0111(r());
+ r1001(r());
+ r1010(r());
+ r1011(r());
+ r1100(r());
+ r1101(r());
+ r1110(r());
+ r1111(r());
+ cr0001(cr());
+ cr0011(cr());
+ cr0100(cr());
+ cr0101(cr());
+ cr0110(cr());
+ cr0111(cr());
+ cr1001(cr());
+ cr1011(cr());
+ cr1100(cr());
+ cr1101(cr());
+ cr1110(cr());
+ cr1111(cr());
+ nl0001(nl); // { dg-error "lvalue" }
+ nl0010(nl); // { dg-error "lvalue" }
+ nl0011(nl); // { dg-error "lvalue" }
+ nl0100(nl);
+ nl0101(nl);
+ nl0110(nl);
+ nl0111(nl);
+ nl1000(nl);
+ nl1001(nl);
+ nl1010(nl);
+ nl1011(nl);
+ nl1100(nl);
+ nl1101(nl);
+ nl1110(nl);
+ nl1111(nl);
+ ncl0001(ncl); // { dg-error "lvalue" }
+ ncl0011(ncl); // { dg-error "lvalue" }
+ ncl0100(ncl);
+ ncl0101(ncl);
+ ncl0110(ncl);
+ ncl0111(ncl);
+ ncl1001(ncl); // { dg-error "lvalue" }
+ ncl1011(ncl); // { dg-error "lvalue" }
+ ncl1100(ncl);
+ ncl1101(ncl);
+ ncl1110(ncl);
+ ncl1111(ncl);
+ nr0001(nr); // { dg-error "lvalue" }
+ nr0010(nr); // { dg-error "lvalue" }
+ nr0011(nr); // { dg-error "lvalue" }
+ nr0100(nr);
+ nr0101(nr);
+ nr0110(nr);
+ nr0111(nr);
+ nr1000(nr);
+ nr1001(nr);
+ nr1010(nr);
+ nr1011(nr);
+ nr1100(nr);
+ nr1101(nr);
+ nr1110(nr);
+ nr1111(nr);
+ ncr0001(ncr); // { dg-error "lvalue" }
+ ncr0011(ncr); // { dg-error "lvalue" }
+ ncr0100(ncr);
+ ncr0101(ncr);
+ ncr0110(ncr);
+ ncr0111(ncr);
+ ncr1001(ncr); // { dg-error "lvalue" }
+ ncr1011(ncr); // { dg-error "lvalue" }
+ ncr1100(ncr);
+ ncr1101(ncr);
+ ncr1110(ncr);
+ ncr1111(ncr);
+ ul0001(ul()); // { dg-error "lvalue" }
+ ul0010(ul()); // { dg-error "lvalue" }
+ ul0011(ul()); // { dg-error "lvalue" }
+ ul0100(ul());
+ ul0101(ul());
+ ul0110(ul());
+ ul0111(ul());
+ ul1000(ul());
+ ul1001(ul());
+ ul1010(ul());
+ ul1011(ul());
+ ul1100(ul());
+ ul1101(ul());
+ ul1110(ul());
+ ul1111(ul());
+ ucl0001(ucl()); // { dg-error "lvalue" }
+ ucl0011(ucl()); // { dg-error "lvalue" }
+ ucl0100(ucl());
+ ucl0101(ucl());
+ ucl0110(ucl());
+ ucl0111(ucl());
+ ucl1001(ucl()); // { dg-error "lvalue" }
+ ucl1011(ucl()); // { dg-error "lvalue" }
+ ucl1100(ucl());
+ ucl1101(ucl());
+ ucl1110(ucl());
+ ucl1111(ucl());
+ ur0001(ur());
+ ur0010(ur());
+ ur0011(ur());
+ ur0100(ur());
+ ur0101(ur());
+ ur0110(ur());
+ ur0111(ur());
+ ur1001(ur());
+ ur1010(ur());
+ ur1011(ur());
+ ur1100(ur());
+ ur1101(ur());
+ ur1110(ur());
+ ur1111(ur());
+ ucr0001(ucr());
+ ucr0011(ucr());
+ ucr0100(ucr());
+ ucr0101(ucr());
+ ucr0110(ucr());
+ ucr0111(ucr());
+ ucr1001(ucr());
+ ucr1011(ucr());
+ ucr1100(ucr());
+ ucr1101(ucr());
+ ucr1110(ucr());
+ ucr1111(ucr());
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C
new file mode 100644
index 0000000..e05693f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C
@@ -0,0 +1,60 @@
+// { dg-do compile { target c++11 } }
+struct B
+{
+ virtual void f() final {}
+ virtual void g() {}
+ virtual void x() const {}
+};
+
+struct B2
+{
+ virtual void h() {}
+};
+
+struct D : B
+{
+ virtual void g() override final {} // { dg-error "overriding" }
+};
+
+template <class T> struct D2 : T
+{
+ void h() override {} // { dg-error "marked override, but does not override" }
+};
+
+template <class T> struct D3 : T
+{
+ void h() override {}
+};
+
+struct D4 : D
+{
+ void g() {} // { dg-error "virtual function" }
+};
+
+struct B3
+{
+ virtual void f() final final {} // { dg-error "duplicate virt-specifier" }
+};
+
+struct B4
+{
+ void f() final {} // { dg-error "marked final, but is not virtual" }
+};
+
+struct D5 : B
+{
+ void ff() override {} // { dg-error "marked override, but does not override" }
+ virtual void fff() override {} // { dg-error "marked override, but does not override" }
+ virtual void x() override {} // { dg-error "marked override, but does not override" }
+ void g() override;
+};
+
+void D5::g() override {} // { dg-error "not allowed outside a class definition" }
+void g() override {} // { dg-error "not allowed outside a class definition" }
+
+int main()
+{
+ D2<B> d;
+ D2<B2> d2;
+ D3<B2> d3;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override2.C
new file mode 100644
index 0000000..c0b89de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override2.C
@@ -0,0 +1,53 @@
+// { dg-do compile { target c++11 } }
+struct B1 {};
+
+struct B2 final {};
+
+struct D1 : B1 {};
+
+struct D2 : B2 {}; // { dg-error "cannot derive from 'final' base" }
+
+template<class T> struct D3 : T {};
+
+template<class T> struct D4 : T {}; // { dg-error "cannot derive from 'final' base" }
+
+template <class T> struct B3 {};
+
+template <class T> struct B4 final {};
+
+template <class T> struct B5 final {};
+
+struct undeclared<int> final { }; // { dg-error "not a class template" }
+
+struct D5 : B3<D5> {};
+
+struct D6 : B4<D6> {}; // { dg-error "cannot derive from 'final' base" }
+
+struct B6 final final {}; // { dg-error "duplicate virt-specifier" }
+
+struct B7 override {}; // { dg-error "cannot specify 'override' for a class" }
+
+namespace N
+{
+ struct C;
+}
+
+struct N::C final{};
+
+int main()
+{
+ D3<B1> d;
+ D4<B2> d2;
+ struct B2 final{}; // { dg-error "previous definition" }
+ B2 final; // { dg-error "has a previous declaration|previously declared here" }
+ B2 final2 = final;
+ struct B2 {}; // { dg-error "redefinition" }
+ struct B2 final; // { dg-error "redeclaration" }
+ struct B2 override; // { dg-message "previously declared here" }
+ struct B2 final {}; // { dg-error "redefinition" }
+ struct B2 override {}; // { dg-error "cannot specify 'override' for a class" }
+ B2 override{}; // { dg-error "redeclaration" }
+ struct foo final {}; // { dg-error "previous definition" }
+ struct foo final {}; // { dg-error "redefinition" }
+ foo final; // { dg-error "conflicting declaration" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override3.C
new file mode 100644
index 0000000..2d22cbf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override3.C
@@ -0,0 +1,24 @@
+// { dg-do compile }
+// { dg-options "--std=c++98" }
+
+struct B final {}; // { dg-warning "override controls" }
+
+struct D : B {}; // { dg-error "cannot derive from 'final' base" }
+
+struct E __final {};
+
+struct F : E {}; // { dg-error "cannot derive from 'final' base" }
+
+struct G
+{
+ virtual void f();
+};
+
+struct H : G
+{
+ void f() override; // { dg-warning "override controls" }
+};
+
+int main()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override4.C
new file mode 100644
index 0000000..7120984
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override4.C
@@ -0,0 +1,45 @@
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "expected ';'" }
+// { dg-prune-output "expected unqualified-id" }
+// { dg-prune-output "declaration does not declare anything" }
+
+struct B
+{
+ virtual auto f() -> void final;
+ virtual auto g() -> void;
+};
+
+struct B2
+{
+ virtual auto f() -> void final {}
+};
+
+struct B3
+{
+ virtual auto f() -> final void; // { dg-error "type" }
+};
+
+struct B4
+{
+ virtual auto f() -> final void {} // { dg-error "type" }
+};
+
+struct D : B
+{
+ virtual auto g() -> void override;
+};
+
+struct D2 : B
+{
+ virtual auto g() -> void override {}
+};
+
+struct D3 : B
+{
+ virtual auto g() -> override void; // { dg-error "type" }
+};
+
+struct D4 : B
+{
+ virtual auto g() -> override void {} // { dg-error "type" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse1.C
new file mode 100644
index 0000000..5a11b73
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse1.C
@@ -0,0 +1,5 @@
+// PR c++/43509
+// { dg-do compile { target c++11 } }
+
+typedef int B; // { dg-message "" }
+B::B() {} // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse2.C
new file mode 100644
index 0000000..77ea14a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/parse2.C
@@ -0,0 +1,15 @@
+// PR c++/54526
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct X { };
+
+struct A { };
+
+int main()
+{
+ X<::A> x;
+}
+
+int a;
+bool b = 0<::a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
new file mode 100644
index 0000000..6d8f565
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename, typename..., typename> void foo(); // { dg-message "note" }
+
+void bar()
+{
+ foo<int>(); // { dg-error "no matching function" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431.C
new file mode 100644
index 0000000..428673d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31431.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename..., typename> void foo(); // { dg-message "note" }
+
+void bar()
+{
+ foo<int>(); // { dg-error "no matching function" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31432.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31432.C
new file mode 100644
index 0000000..1f2ea50
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31432.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename..., typename> struct A // { dg-error "parameter pack" }
+{
+ static int i;
+};
+
+A<int, int> a; // { dg-error "mismatch|expected|invalid type" }
+A<char,int> b; // { dg-error "mismatch|expected|invalid type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31434.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31434.C
new file mode 100644
index 0000000..e70bdd1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31434.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> int foo(const T&) // { dg-error "not expanded with|T" }
+{
+ union { T t; }; // { dg-error "not expanded with|T" }
+ return t;
+}
+
+void bar()
+{
+ foo(0); // { dg-error "no matching" }
+ // { dg-message "(candidate|cannot convert)" "candidate note" { target *-*-* } 10 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31437.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31437.C
new file mode 100644
index 0000000..5f7010f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31437.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template <typename... T> struct A // { dg-message "candidates|A" }
+{
+ A(T* p) { // { dg-error "parameter packs|T" }
+ (A<T...>*)(p);
+ }
+};
+
+A<int> a(0); // { dg-error "no matching" }
+// { dg-message "candidate" "candidate note" { target *-*-* } 9 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31438.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31438.C
new file mode 100644
index 0000000..272f402
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31438.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+template<typename> struct A;
+template<typename T, typename... U> struct A<T(U)> // { dg-error "parameter packs|U" }
+{
+ template<typename X> A(X);
+};
+
+A<void(int)> a(0); // { dg-error "incomplete type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31439.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31439.C
new file mode 100644
index 0000000..f753735
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31439.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct A;
+
+template<char> struct A<> {}; // { dg-error "not used in partial specialization|anonymous|declaration" }
+
+template<typename T, typename... U> struct A<T, U...> : A<U...> {}; // { dg-error "incomplete type" }
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31442.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31442.C
new file mode 100644
index 0000000..7fd20e7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31442.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<typename... T, T = 0> struct A {}; // { dg-error "parameter packs|T|the end|parameter packs|anonymous" }
+
+struct B
+{
+ template <template <typename...> class C> B(C<int>);
+};
+
+B b = A<int>(); // { dg-error "mismatch|expected" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31443.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31443.C
new file mode 100644
index 0000000..3169312
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31443.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+template<int, typename... T> struct A
+{
+ template<int N> void foo(A<N,T>); // { dg-error "parameter packs|T" }
+};
+
+void bar()
+{
+ A<0,int>().foo(A<0,int>()); // { dg-error "no member named" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31444.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31444.C
new file mode 100644
index 0000000..955562d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31444.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> struct A
+{
+ template<int> void foo(A<T>); // { dg-error "not expanded|T" }
+};
+
+void bar()
+{
+ A<int>().foo<0>(A<int>()); // { dg-error "no member named" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31445.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31445.C
new file mode 100644
index 0000000..89aae9a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31445.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template <typename... T> struct A
+{
+ void foo(T...);
+ A(T... t) { foo(t); } // { dg-error "parameter packs|t" }
+};
+
+A<int> a(0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31993.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31993.C
new file mode 100644
index 0000000..9c3411c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr31993.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+template<typename...> struct A;
+
+template<template<int> class... T> struct A<T<0>...>
+{
+ template<int> struct B {};
+ B<0> b;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32114.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32114.C
new file mode 100644
index 0000000..0ae684c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32114.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename ...T> struct A
+{
+ typedef typename T::X Y; // { dg-error "not expanded|T" }
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32115.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32115.C
new file mode 100644
index 0000000..5722aa3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32115.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+template<typename ...T, int = 0> struct A {}; // { dg-error "end of" }
+
+A<int> a; // { dg-error "mismatch|expected|invalid" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32125.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32125.C
new file mode 100644
index 0000000..01844bd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32125.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct A;
+
+template<typename...T> struct A<T*> // { dg-error "not expanded|T" }
+{
+ A();
+ A(T);
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32126.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32126.C
new file mode 100644
index 0000000..dac1da5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32126.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct A;
+
+template<typename...T> struct A<T> // { dg-error "not expanded|T|" }
+{
+ static int i;
+};
+
+A<char> a; // { dg-error "incomplete" }
+A<int> b; // { dg-error "incomplete" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32127.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32127.C
new file mode 100644
index 0000000..586469d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32127.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename...T> struct A
+{
+ static T i; // { dg-error "parameter packs|T" }
+};
+
+int j = A<int>::i; // { dg-error "not a member" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32128.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32128.C
new file mode 100644
index 0000000..147001e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32128.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct A;
+
+template<typename...T, typename...U>
+ struct A<T..., U...> {}; // { dg-error "must be at the end" }
+
+A<int> a; // { dg-error "incomplete" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32252.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32252.C
new file mode 100644
index 0000000..715ad27
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32252.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+int x[5];
+
+template<int M, int N, int (&... p)[N]> struct A;
+
+template<int M> struct A<M,5,x> {};
+
+A<0,5,x> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32253.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32253.C
new file mode 100644
index 0000000..2094b2d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32253.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<void (*... fp)()> struct A
+{
+ A() { fp(); } // { dg-error "not expanded|fp" }
+};
+
+void foo();
+
+A<foo> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32566.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32566.C
new file mode 100644
index 0000000..fd07432
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr32566.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+template<int...> struct A;
+
+template<template<int> class... T> struct A<T...> {}; // { dg-error "mismatch|expected" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33839.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33839.C
new file mode 100644
index 0000000..50bcfe8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33839.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<int> struct A;
+
+void foo()
+{
+ __decltype A<0>; // { dg-error "invalid declarator|expected" }
+ __decltype (A<0>); // { dg-error "must be an expression" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33930.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33930.C
new file mode 100644
index 0000000..8d9312c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33930.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+typedef const int* type;
+
+float& foo( const type& ggg );
+int& foo( type&& ggg );
+
+void bar( int* someptr )
+{
+ int& x = foo( someptr );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33955.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33955.C
new file mode 100644
index 0000000..7d3f6b6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33955.C
@@ -0,0 +1,39 @@
+// { dg-do compile { target c++11 } }
+template<typename T>
+struct uncvref
+{
+ typedef T type;
+};
+
+template<typename... Args>
+struct args
+{
+ static const int size = sizeof...(Args);
+};
+
+template<typename G, typename E, typename S, typename V, long GN = G::size, long EN = E::size>
+struct apply_args;
+
+template<typename... G, typename... E, typename S, typename V, long N>
+struct apply_args<args<G...>, args<E...>, S, V, N, N>
+{
+ typedef args<
+ typename G::template apply<typename uncvref<E>::type, S, V>::type...
+ > type;
+};
+
+struct or_
+{
+ template<typename E, typename S, typename V>
+ struct apply {
+ typedef typename E::type type;
+ };
+};
+
+template<typename T>
+struct identity
+{
+ typedef T type;
+};
+
+apply_args<args<or_>, args<identity<int>>, float, double> a1;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33996.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33996.C
new file mode 100644
index 0000000..3fca7f2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr33996.C
@@ -0,0 +1,52 @@
+// { dg-do compile { target c++11 } }
+
+#define BUG
+struct type
+{
+ type() { }
+ type(const type&) { }
+
+private:
+ type(type&&);
+};
+
+template<typename _Tp>
+ struct identity
+ {
+ typedef _Tp type;
+ };
+
+template<typename _Tp>
+ inline _Tp&&
+ forward(typename identity<_Tp>::type&& __t)
+ { return __t; }
+
+struct vec
+{
+ template<typename _Args>
+ void
+ bar(_Args&& __args)
+#ifdef BUG
+ ;
+#else
+ {
+ type(forward<_Args>(__args));
+ }
+#endif
+};
+
+#ifdef BUG
+template<typename _Args>
+ void
+ vec::bar(_Args&& __args)
+ {
+ type(forward<_Args>(__args));
+ }
+#endif
+
+int main()
+{
+ vec v;
+ type c;
+ v.bar(c);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34054.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34054.C
new file mode 100644
index 0000000..8043f96
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34054.C
@@ -0,0 +1,4 @@
+// PR c++/34054
+// { dg-do compile { target c++11 } }
+
+template<typename... T> T foo() {} // { dg-error "not expanded|T" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34056.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34056.C
new file mode 100644
index 0000000..9c5261d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34056.C
@@ -0,0 +1,9 @@
+// PR c++/34056
+// { dg-do compile { target c++11 } }
+
+template<typename... T> struct A
+{
+ void foo (T *) { ++p; } // { dg-error "not expanded|T" }
+ void bar (T **) { } // { dg-error "not expanded|T" }
+ T *p; // { dg-error "not expanded|T" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34057.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34057.C
new file mode 100644
index 0000000..d74018e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34057.C
@@ -0,0 +1,7 @@
+// PR c++/34057
+// { dg-do compile { target c++11 } }
+
+template <typename... T> struct A
+{
+ typedef T X __attribute__ ((vector_size (8))); // { dg-error "not expanded|T" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34058.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34058.C
new file mode 100644
index 0000000..dc9e836
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34058.C
@@ -0,0 +1,9 @@
+// PR c++/34058
+// { dg-do compile { target c++11 } }
+
+template <typename...T> struct A
+{
+ typedef T X; // { dg-error "not expanded|T" }
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34060.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34060.C
new file mode 100644
index 0000000..f485346
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34060.C
@@ -0,0 +1,10 @@
+// PR c++/34060
+// { dg-do compile { target c++11 } }
+
+template <int> struct A
+{
+ template <typename... > struct B {};
+ template <typename... T> struct B <int, T *> {}; // { dg-error "not expanded|T" }
+};
+
+A<0>::B<int>b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34061.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34061.C
new file mode 100644
index 0000000..64f0ded
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr34061.C
@@ -0,0 +1,4 @@
+// PR c++/34061
+// { dg-do compile { target c++11 } }
+
+template<template<int> class ...T> struct A : T<0> {}; // { dg-error "not expanded|T" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38646.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38646.C
new file mode 100644
index 0000000..7dd53ae
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38646.C
@@ -0,0 +1,11 @@
+/* PR c++/38646 */
+/* { dg-do compile { target c++11 } } */
+
+template<int...> struct A;
+
+template<int... N> struct A<N..., N...> /* { dg-error "must be at the end" } */
+{
+ template<typename> struct B;
+
+ template<typename T> struct B<T*> {};
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38795.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38795.C
new file mode 100644
index 0000000..89ce0d3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr38795.C
@@ -0,0 +1,12 @@
+// PR c++/38795
+// { dg-do compile { target c++11 } }
+
+template<typename... T> int foo(int i)
+{
+ return *reinterpret_cast<T*>(i); // { dg-error "not expanded with|T" }
+}
+
+void bar(int i)
+{
+ foo<int>(i);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr39639.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr39639.C
new file mode 100644
index 0000000..5618e80
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr39639.C
@@ -0,0 +1,20 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++/39639
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "template argument 1 is invalid" }
+
+template <class... Types>
+struct S
+ : S<...Types>, // { dg-error "expected parameter pack before '...'" }
+ S<...Types...>, // { dg-error "expected parameter pack before '...'" }
+ S<...> // { dg-error "expected parameter pack before '...'" }
+{
+ static int f () { return 1;}
+};
+
+int
+main ()
+{
+ return S<void>::f ();
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C
new file mode 100644
index 0000000..ff23966
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr42844-2.C
@@ -0,0 +1,41 @@
+// PR c++/42844
+// { dg-do compile { target c++11 } }
+
+struct A // { dg-message "user-provided default constructor" }
+{
+ int i;
+ A() = default; // { dg-message "not user-provided" }
+};
+
+struct Base
+{
+ Base() {}
+};
+
+struct Derived : Base // { dg-message "user-provided default constructor" }
+{
+ int i;
+ Derived() = default; // { dg-message "not user-provided" }
+};
+
+struct Derived2 : Base // { dg-message "user-provided default constructor" }
+{
+ int i;
+ Derived2() = default; // { dg-message "not user-provided" }
+ Derived2( Derived2 const& ) = default;
+};
+
+struct Derived3 : Base // { dg-message "user-provided default constructor" }
+{
+ int i;
+ Derived3( Derived3 const& ) = default;
+ Derived3() = default; // { dg-message "not user-provided" }
+};
+
+void f()
+{
+ const A a; // { dg-error "uninitialized const" }
+ const Derived d; // { dg-error "uninitialized const" }
+ const Derived2 d2; // { dg-error "uninitialized const" }
+ const Derived3 d3; // { dg-error "uninitialized const" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr45908.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr45908.C
new file mode 100644
index 0000000..dad8dfd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr45908.C
@@ -0,0 +1,17 @@
+// PR c++/45908
+// Testcase by Jonathan Wakely <redi@gcc.gnu.org>
+
+// { dg-do compile { target c++11 } }
+
+struct vector {
+ struct iterator { };
+ struct const_iterator { };
+ iterator begin();
+ const_iterator begin() const;
+};
+
+class block {
+ vector v;
+ auto end() const -> decltype(v.begin())
+ { return v.begin(); }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47416.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47416.C
new file mode 100644
index 0000000..e4eb317
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47416.C
@@ -0,0 +1,224 @@
+// PR c++/47416
+// { dg-do compile { target c++11 } }
+
+namespace std
+{
+ template < typename _Tp, _Tp __v > struct integral_constant
+ {
+ static const _Tp value = __v;
+ };
+ typedef integral_constant < bool, false > false_type;
+ template < typename > struct is_array:false_type
+ {
+ };
+ template < typename > struct is_function:false_type
+ {
+ };
+ template < typename _Tp > struct remove_const
+ {
+ typedef _Tp type;
+ };
+ template < typename _Tp > struct remove_volatile
+ {
+ typedef _Tp type;
+ };
+ template < typename _Tp > struct remove_cv
+ {
+ typedef typename remove_const < typename remove_volatile <
+ _Tp >::type >::type type;
+ };
+ template < typename > struct remove_reference
+ {
+ };
+ template < typename _Tp > struct remove_reference <_Tp & >
+ {
+ typedef _Tp type;
+ };
+ template < typename _Up, bool = is_array < _Up >::value, bool =
+ is_function < _Up >::value > struct __decay_selector;
+ template < typename _Up > struct __decay_selector <_Up, false, false >
+ {
+ typedef typename remove_cv < _Up >::type __type;
+ };
+ template < typename _Tp > class decay
+ {
+ typedef typename remove_reference < _Tp >::type __remove_type;
+ public:typedef typename __decay_selector <
+ __remove_type >::__type type;
+ };
+ template < typename _Tp > struct __strip_reference_wrapper
+ {
+ typedef _Tp __type;
+ };
+ template < typename _Tp > struct __decay_and_strip
+ {
+ typedef typename __strip_reference_wrapper < typename decay <
+ _Tp >::type >::__type __type;
+ };
+ template < typename _Tp > _Tp forward (typename remove_reference <
+ _Tp >::type &)
+ {
+ }
+ template < class _T1, class _T2 > struct pair
+ {
+ _T1 first;
+ _T2 second;
+ constexpr pair (_T1, _T2 &):first (), second (__b) // { dg-error "was not declared in this scope" }
+ {
+ }
+ };
+ template < class _T1,
+ class _T2 > pair < typename __decay_and_strip < _T1 >::__type,
+ typename __decay_and_strip < _T2 >::__type > make_pair (_T1 && __x, _T2
+ && __y)
+ {
+ typedef typename __decay_and_strip < _T1 >::__type __ds_type1;
+ typedef typename __decay_and_strip < _T2 >::__type __ds_type2;
+ typedef pair < __ds_type1, __ds_type2 > __pair_type;
+ __pair_type (forward < _T1 > (__x), std::forward < _T2 > (__y));
+ }
+}
+
+typedef long size_t;
+namespace std
+{
+ template < typename > class allocator;
+ template < class > struct char_traits;
+ template < typename _CharT, typename = char_traits < _CharT >, typename =
+ allocator < _CharT > >class basic_string;
+ typedef basic_string < char >string;
+}
+namespace __gnu_cxx
+{
+ template < bool > class __pool;
+ template < template < bool > class, bool > struct __common_pool
+ {
+ };
+ template < template < bool > class, bool > struct __common_pool_base;
+ template < template < bool > class _PoolTp >
+ struct __common_pool_base <_PoolTp, true >:__common_pool < _PoolTp, true >
+ {
+ };
+ template < template < bool > class _PoolTp,
+ bool _Thread > struct __common_pool_policy:__common_pool_base < _PoolTp,
+ _Thread >
+ {
+ template < typename, template < bool > class _PoolTp1 =
+ _PoolTp, bool _Thread1 = _Thread > struct _M_rebind
+ {
+ typedef __common_pool_policy < _PoolTp1, _Thread1 > other;
+ };
+ };
+ template < typename _Tp > class __mt_alloc_base
+ {
+ };
+template < typename _Tp, typename _Poolp = __common_pool_policy < __pool, true > >class __mt_alloc:public __mt_alloc_base <
+ _Tp
+ >
+ {
+ public:size_t size_type;
+ typedef _Tp value_type;
+ template < typename _Tp1, typename _Poolp1 = _Poolp > struct rebind
+ {
+ typedef typename _Poolp1::template _M_rebind < _Tp1 >::other pol_type;
+ typedef __mt_alloc < _Tp1, pol_type > other;
+ };
+ };
+}
+
+namespace std
+{
+ template < typename _Tp > class allocator:public __gnu_cxx::__mt_alloc <
+ _Tp >
+ {
+ };
+ template < typename, typename > struct unary_function
+ {
+ };
+ template < typename, typename, typename > struct binary_function
+ {
+ };
+ template < typename _Tp > struct equal_to:binary_function < _Tp, _Tp, bool >
+ {
+ };
+}
+
+namespace boost
+{
+ template < class > struct hash;
+ template < class K, class T, class = hash < K >, class =
+ std::equal_to < K >, class =
+ std::allocator < std::pair < const K, T > >>class unordered_map;
+ template < >struct hash <std::string >:std::unary_function < std::string,
+ size_t >
+ {
+ };
+ namespace unordered_detail
+ {
+ template < class Alloc, class T > struct rebind_wrap
+ {
+ typedef typename Alloc::template rebind < T >::other type;
+ };
+ }
+ namespace unordered_detail
+ {
+ size_t default_bucket_count;
+ template < class, class > struct map_extractor;
+ struct ungrouped
+ {
+ };
+ template < class T > class hash_table:T::buckets, T::buffered_functions
+ {
+ };
+ template < class, class, class H, class P, class A, class, class G > struct types
+ {
+ typedef H hasher;
+ typedef P key_equal;
+ typedef A value_allocator;
+ };
+ template < class T > class hash_unique_table:T
+ {
+ public:typedef typename T::hasher hasher;
+ typedef typename T::key_equal key_equal;
+ typedef typename T::value_allocator value_allocator;
+ typedef typename T::table table;
+ hash_unique_table (size_t n, hasher, key_equal,
+ value_allocator & a):table (n, a) // { dg-error "is not a direct base" }
+ {
+ }
+ };
+ template < class K, class H, class P, class A > struct map:types < K,
+ typename A::value_type, H, P, A, map_extractor < K,
+ typename A::value_type >, ungrouped >
+ {
+ typedef hash_unique_table < map < K, H, P, A > >impl;
+ typedef hash_table < map < K, H, P, A > >table;
+ };
+ }
+ template < class K, class T, class H, class P, class A > class unordered_map
+ {
+ typedef std::pair < const K, T > value_type;
+ typedef H hasher;
+ typedef P key_equal;
+ typedef A allocator_type;
+ typedef typename unordered_detail::rebind_wrap < allocator_type,
+ value_type >::type value_allocator;
+ typedef boost::unordered_detail::map < K, H, P, value_allocator > types;
+ typedef typename types::impl table;
+ typedef size_t size_type;
+ private:table table_;
+ public: unordered_map (size_type n = boost::unordered_detail::default_bucket_count,
+ hasher hf = hasher (), key_equal eql = key_equal (),
+ allocator_type a = allocator_type ()):table_ (n, hf, eql, a) // { dg-message "required" }
+ {
+ }
+ };
+}
+
+void
+foo (const int &a)
+{
+ typedef boost::unordered_map < std::string, int >Name2Port;
+ Name2Port b; // { dg-message "required" }
+ std::make_pair (a, b);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47476.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47476.C
new file mode 100644
index 0000000..bf9a065
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr47476.C
@@ -0,0 +1,9 @@
+// PR c++/47476
+// { dg-do compile { target c++11 } }
+
+int
+foo (int a, int b)
+{
+ const bool c ((a != 0) == (b != 26));
+ return c;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr48522.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr48522.C
new file mode 100644
index 0000000..560e70b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr48522.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct Handle
+{
+ Handle(T& t);
+};
+
+template<class T>
+struct Class {
+ struct Struct {} data;
+ void f();
+ void g();
+};
+
+template<class T>
+void Class<T>::f() {
+ Handle< decltype((data)) > handle(data);
+}
+
+template<class T>
+void Class<T>::g() {
+ Handle< decltype((data)) > handle(data);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50025.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50025.C
new file mode 100644
index 0000000..1f7d8d5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50025.C
@@ -0,0 +1,40 @@
+// { dg-do compile { target c++11 } }
+
+#include <utility>
+
+class A
+{
+public:
+
+ A(int a, int& b, int&& c)
+ : m_a{a},
+ m_b{b},
+ m_c{std::move(c)}
+ {}
+
+private:
+
+ int m_a;
+ int& m_b;
+ int&& m_c;
+};
+
+
+struct X {};
+
+class B
+{
+public:
+
+ B(X& q, X&& r, const X& s)
+ : m_q{q},
+ m_r{std::move(r)},
+ m_s{s}
+ {}
+
+private:
+
+ X& m_q;
+ X&& m_r;
+ const X& m_s;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50491.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50491.C
new file mode 100644
index 0000000..d203a33
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50491.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+struct GrandParent {
+ void *get();
+};
+
+template<class OBJ>
+struct Parent : public GrandParent{
+};
+
+template<typename T>
+struct Child : public Parent<T> {
+ using GrandParent::get;
+ void Foo() {
+ void* ex = get();
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50901.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50901.C
new file mode 100644
index 0000000..de82435
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr50901.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+template<class T> int foo(int a)
+{
+ const unsigned b = a < 0 ? -a : a;
+ return 0;
+}
+
+int i = foo<float>(1);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51150.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51150.C
new file mode 100644
index 0000000..af1d1cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51150.C
@@ -0,0 +1,20 @@
+// PR c++/51150
+// { dg-do compile { target c++11 } }
+
+struct Clock {
+ double Now();
+};
+template <class T> void Foo(Clock* clock) {
+ const int now = clock->Now();
+}
+
+template void Foo<float>(Clock*);
+
+template <class T> void Boo(int val) {
+ const int now1 = (double)(val);
+ const int now2 = const_cast<double>(val); // { dg-error "invalid" }
+ const int now3 = static_cast<double>(val);
+ const int now4 = reinterpret_cast<double>(val); // { dg-error "invalid" }
+}
+
+template void Boo<float>(int);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51216.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51216.C
new file mode 100644
index 0000000..356b628
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51216.C
@@ -0,0 +1,11 @@
+// PR c++/51216
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+void foo()
+{
+ int i = ({ if (1) ; }); // { dg-error "ignored" }
+ int j = ({ for (;;) ; }); // { dg-error "ignored" }
+ int k = ({ while (1) ; }); // { dg-error "ignored" }
+ int l = ({ do { } while (1); }); // { dg-error "ignored" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51225.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51225.C
new file mode 100644
index 0000000..f80bd0e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51225.C
@@ -0,0 +1,14 @@
+// PR c++/51225
+// { dg-do compile { target c++11 } }
+
+template<int> struct A {};
+
+template<typename> void foo()
+{
+ A<int(x)> a; // { dg-error "not declared|invalid type" }
+}
+
+template<typename> struct bar
+{
+ static constexpr A<1> b = A<1>(x); // { dg-error "not declared" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51226.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51226.C
new file mode 100644
index 0000000..1e048ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51226.C
@@ -0,0 +1,9 @@
+// PR c++/51226
+// { dg-do compile { target c++11 } }
+
+template<int> struct A // { dg-error "provided" }
+{
+ enum E : int;
+};
+
+template<> enum A<>::E : int {} // { dg-error "wrong number|expected" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51313.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51313.C
new file mode 100644
index 0000000..eb304ba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51313.C
@@ -0,0 +1,18 @@
+// PR c++/51313
+// { dg-do compile { target c++11 } }
+
+class ostream;
+
+extern "C" {
+ extern int isdigit (int);
+}
+
+ostream&
+operator<<(ostream&, const unsigned char*);
+
+extern ostream cout;
+
+int main()
+{
+ cout << isdigit(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51420.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51420.C
new file mode 100644
index 0000000..7aa80e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51420.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+void
+foo()
+{
+ float x = operator"" _F(); // { dg-error "was not declared in this scope" }
+ float y = 0_F; // { dg-error "unable to find numeric literal operator" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51463.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51463.C
new file mode 100644
index 0000000..6a57e47
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51463.C
@@ -0,0 +1,7 @@
+// PR c++/51463
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ static virtual int i = 0; // { dg-error "both virtual and static|declared as" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51547.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51547.C
new file mode 100644
index 0000000..578a799
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51547.C
@@ -0,0 +1,50 @@
+// PR c++/51547
+// { dg-do compile { target c++11 } }
+
+template <class T>
+struct vector
+{
+ T*
+ begin()
+ { return &member; }
+
+ const T*
+ begin() const
+ { return &member; }
+
+ T member;
+};
+
+struct Bar {
+ int x;
+};
+
+struct Foo {
+ const vector<Bar>& bar() const {
+ return bar_;
+ }
+
+ vector<Bar> bar_;
+};
+
+template <class X>
+struct Y {
+ void foo() {
+ Foo a;
+ auto b = a.bar().begin();
+ auto&& c = b->x;
+ }
+};
+
+template <class X>
+void foo() {
+ Foo a;
+ auto b = a.bar().begin();
+ auto&& c = b->x;
+}
+
+int main() {
+ Y<int> p;
+ p.foo();
+ foo<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51619.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51619.C
new file mode 100644
index 0000000..9a73188
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51619.C
@@ -0,0 +1,6 @@
+// PR c++/51619
+// { dg-do compile { target c++11 } }
+
+struct A { virtual ~A(); };
+struct B { A a[1][1]; } b;
+struct C { A a[3][3]; } c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51786.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51786.C
new file mode 100644
index 0000000..69b7441
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr51786.C
@@ -0,0 +1,8 @@
+// PR c++/51786
+// { dg-do compile { target c++11 } }
+
+enum E {};
+struct A {};
+
+void foo() { decltype(E{}); } // { dg-error "does not declare anything" }
+void bar() { decltype(A{}); } // { dg-error "does not declare anything" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52440.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52440.C
new file mode 100644
index 0000000..0210f53
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52440.C
@@ -0,0 +1,27 @@
+// PR c++/52440
+// { dg-do compile { target c++11 } }
+
+template<bool>
+struct V
+{
+ typedef void type;
+};
+
+template<typename T>
+struct X
+{
+ template<typename>
+ static constexpr bool always_true()
+ {
+ return true;
+ }
+
+ template<typename U,
+ typename = typename V<always_true<U>()>::type>
+ X(U &&) {}
+};
+
+int main()
+{
+ X<int> x(42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52744.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52744.C
new file mode 100644
index 0000000..1a01fb2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52744.C
@@ -0,0 +1,83 @@
+// PR c++/52744
+// { dg-do compile { target c++11 } }
+
+struct T
+{
+ int a;
+ void b(){}
+ int c(int)
+ {
+ return 1;
+ }
+};
+
+template<typename CT, CT> struct member_helper;
+
+template<typename FT, FT(T::*mem)>
+struct member_helper<FT(T::*), mem>
+{
+ static const char* worker()
+ {
+ return "for members";
+ }
+};
+
+template<typename Return, typename... Args, Return(T::*fun)(Args...)>
+struct member_helper<Return(T::*)(Args...), fun>
+{
+ static const char* worker()
+ {
+ return "for member functions returning non void";
+ }
+};
+
+template<typename... Args, void(T::*fun)(Args...)>
+struct member_helper<void(T::*)(Args...), fun>
+{
+ static const char* worker()
+ {
+ return "for member functions returning void";
+ }
+};
+
+void member_test()
+{
+ member_helper<decltype(&T::a), &T::a>::worker();
+ member_helper<decltype(&T::b), &T::b>::worker();
+ member_helper<decltype(&T::c), &T::c>::worker();
+}
+
+typedef void lua_State;
+
+template<typename T, T> class function_helper
+{
+ static_assert(sizeof(T) != sizeof(T),
+ "Error: function_helper works with functions (duh)");
+};
+
+template<typename Return, typename... Args, Return(*func)(Args...)>
+struct function_helper<Return(*)(Args...), func>
+{
+ static int wrapper(lua_State* l)
+ {
+ return 1;
+ }
+};
+
+template<typename... Args, void(*func)(Args...)>
+struct function_helper<void(*)(Args...), func>
+{
+ static int wrapper(lua_State* l)
+ {
+ return 0;
+ }
+};
+
+int ciao(int){ return 0; }
+void ciao2(int){}
+
+void function_test()
+{
+ function_helper<decltype(&ciao), &ciao>::wrapper(0);
+ function_helper<decltype(&ciao2), &ciao2>::wrapper(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52841.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52841.C
new file mode 100644
index 0000000..f6467f8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr52841.C
@@ -0,0 +1,17 @@
+// { dg-do compile }
+
+struct Solvable;
+namespace sat
+{
+ class Solvable
+ {
+ public:
+ typedef bool bool_type;
+ };
+}
+
+class Resolvable : public sat::Solvable
+{
+public:
+ using sat::Solvable::bool_type;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54318.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54318.C
new file mode 100644
index 0000000..4dac31b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54318.C
@@ -0,0 +1,24 @@
+// PR c++/54318
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct wrapped
+{
+ typedef T type;
+};
+
+template <typename T>
+typename T::type unwrap1(T);
+
+int unwrap(int);
+
+template <typename T>
+auto unwrap(T t) -> decltype(unwrap(unwrap1(t)))
+{
+ return unwrap(unwrap1(t));
+}
+
+int main()
+{
+ unwrap(wrapped<wrapped<int>>());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54323.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54323.C
new file mode 100644
index 0000000..71b6c71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr54323.C
@@ -0,0 +1,37 @@
+// PR c++/54323
+// { dg-do compile { target c++11 } }
+
+template<bool, typename T = void>
+struct enable_if { };
+
+template<typename T>
+struct enable_if<true, T>
+{ typedef T type; };
+
+template<template<typename> class CRTP, typename T>
+class Base
+{
+public:
+ template<template<typename> class CRTP0, typename T0, class>
+ friend int func(const Base<CRTP0, T0>& rhs);
+
+protected:
+ int n;
+};
+
+template<template<typename> class CRTP0, typename T0,
+ class = typename enable_if<true>::type>
+int func(const Base<CRTP0, T0>& rhs)
+{
+ return rhs.n;
+}
+
+template<typename T>
+class Derived : public Base<Derived, T> {};
+
+int main()
+{
+ Derived<int> x;
+ func(x);
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57101.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57101.C
new file mode 100644
index 0000000..94b576f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57101.C
@@ -0,0 +1,221 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-fcompare-debug" }
+
+typedef long unsigned size_t;
+namespace
+{
+ template < typename _Tp, _Tp __v > struct integral_constant
+ {
+ static const _Tp value = __v;
+ };
+ typedef integral_constant < bool, false > false_type;
+ template < typename > struct remove_cv;
+ template < typename > struct __is_void_helper:false_type
+ {
+ };
+ template
+ <
+ typename
+ _Tp
+ >
+ struct
+ is_void:integral_constant
+ < bool, (__is_void_helper < typename remove_cv < _Tp >::type >::value) >
+ {
+ };
+ template < typename > struct is_function:false_type
+ {
+ };
+ template < typename _Tp > struct remove_const
+ {
+ typedef _Tp type;
+ };
+ template < typename _Tp > struct remove_volatile
+ {
+ typedef _Tp type;
+ };
+ template < typename _Tp > struct remove_cv
+ {
+ typedef
+ typename
+ remove_const < typename remove_volatile < _Tp >::type >::type type;
+ };
+ template < typename > struct is_lvalue_reference:false_type
+ {
+ };
+ template < typename _Tp, bool = is_void < _Tp >::value > struct __add_rvalue_reference_helper
+ {
+ typedef _Tp type;
+ };
+ template
+ <
+ typename
+ _Tp > struct add_rvalue_reference:__add_rvalue_reference_helper < _Tp >
+ {
+ };
+ template
+ < typename _Tp > typename add_rvalue_reference < _Tp >::type declval ();
+ template
+ <
+ typename,
+ typename
+ _To, bool = (is_function < _To >::value) > struct __is_convertible_helper;
+ template
+ <
+ typename
+ _From, typename _To > struct __is_convertible_helper <_From, _To, false >
+ {
+ static const bool __value = sizeof ((declval < _From > ()));
+ };
+ template
+ <
+ typename
+ _From,
+ typename
+ _To
+ >
+ struct
+ is_convertible:integral_constant
+ < bool, __is_convertible_helper < _From, _To >::__value >
+ {
+ };
+ template < bool, typename _Tp = void >struct enable_if
+ {
+ typedef _Tp type;
+ };
+ template < typename _Tp > struct identity
+ {
+ typedef _Tp type;
+ };
+ template
+ <
+ typename
+ _Tp
+ >
+ typename
+ enable_if
+ <
+ is_lvalue_reference
+ < _Tp >::value, _Tp >::type forward (typename identity < _Tp >::type)
+ {
+ return 0;
+
+ }
+ template < class _T1, class > struct pair
+ {
+ _T1 first;
+ template < class _U1, class = typename enable_if < is_convertible < _U1, _T1 >::value >::type > pair (_U1 __x):
+ first
+ (forward < _U1 > (__x))
+ {
+ }
+ };
+}
+
+namespace __gnu_cxx
+{
+ template < typename > class new_allocator
+ {
+ };
+}
+
+namespace std
+{
+ template < typename _Tp > class allocator:__gnu_cxx::new_allocator < _Tp >
+ {
+ public:
+ template < typename > struct rebind
+ {
+ typedef allocator other;
+ };
+ };
+ template < typename, typename > struct unary_function;
+ template < typename, typename, typename > struct binary_function
+ {
+ };
+ template < typename _Tp > struct less:binary_function < _Tp, _Tp, bool >
+ {
+ };
+ template
+ <
+ typename
+ _Pair
+ > struct _Select1st:unary_function < _Pair, typename _Pair::first_type >
+ {
+ };
+ template < typename > struct _Rb_tree_node;
+ template
+ <
+ typename,
+ typename
+ _Val,
+ typename,
+ typename _Compare, typename _Alloc = allocator < _Val > >class _Rb_tree
+ {
+ typedef
+ typename
+ _Alloc::template
+ rebind < _Rb_tree_node < _Val > >::other _Node_allocator;
+ public:
+ typedef _Alloc allocator_type;
+ template < typename _Key_compare > struct _Rb_tree_impl
+ {
+ _Rb_tree_impl (_Key_compare, _Node_allocator);
+ };
+ _Rb_tree_impl < _Compare > _M_impl;
+ _Rb_tree (_Compare __comp, allocator_type __a):
+ _M_impl (__comp, __a)
+ {
+ }
+ };
+ template < class _E > class initializer_list
+ {
+ typedef size_t size_type;
+ typedef _E *iterator;
+ iterator _M_array;
+ size_type _M_len;
+ };
+ template
+ <
+ typename
+ _Key,
+ typename
+ _Tp,
+ typename
+ _Compare
+ =
+ less
+ <
+ _Key >, typename _Alloc = allocator < pair < _Key, _Tp > > >class multimap
+ {
+ typedef _Key key_type;
+ typedef pair < _Key, _Tp > value_type;
+ typedef _Compare key_compare;
+ typedef _Alloc allocator_type;
+ typedef
+ _Rb_tree
+ <
+ key_type,
+ value_type, _Select1st < value_type >, key_compare > _Rep_type;
+ _Rep_type _M_t;
+ public:
+ multimap (initializer_list < value_type >, _Compare __comp = _Compare (), allocator_type __a = allocator_type ()):
+ _M_t
+ (__comp, __a)
+ {
+ }
+ };
+}
+
+using namespace std;
+void
+test01 ()
+{
+ typedef multimap < int, double >Container;
+ Container (
+ {
+ {
+ 1}
+ }
+ );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57172.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57172.C
new file mode 100644
index 0000000..2108838
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57172.C
@@ -0,0 +1,7 @@
+// PR c++/57172
+// { dg-do compile { target c++11 } }
+
+template <typename T> int f (T&) { return 0; }
+template <typename T> int f (T&&) = delete;
+int i;
+int j = f (i);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57416.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57416.C
new file mode 100644
index 0000000..104f1a7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57416.C
@@ -0,0 +1,45 @@
+// PR c++/57416
+// { dg-do compile { target c++11 } }
+
+struct Nothing
+{
+};
+
+template <class PARENTDATA>
+void func3 (PARENTDATA & p_parent_data)
+{
+ struct Data
+ {
+ PARENTDATA & parent_data = p_parent_data; // { dg-error "parameter" }
+ } data;
+}
+
+template <class PARENTDATA>
+void func2 (PARENTDATA & p_parent_data)
+{
+ struct Data
+ {
+ PARENTDATA & parent_data = p_parent_data; // { dg-error "parameter" }
+ } data;
+
+ data.parent_data.x = 5;
+ func3(data);
+}
+
+template <class PARENTDATA>
+void func1 (PARENTDATA & p_parent_data)
+{
+ struct Data
+ {
+ PARENTDATA & parent_data = p_parent_data; // { dg-error "parameter" }
+ int x = 1;
+ } data;
+
+ func2(data);
+}
+
+int main()
+{
+ Nothing nothing;
+ func1(nothing);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57981.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57981.C
new file mode 100644
index 0000000..33f4637
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr57981.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall -Wextra" }
+
+template<class T>
+void f(T t, void* = 0) // { dg-warning "unused parameter" }
+{
+}
+
+template<class T>
+auto g(T t) -> decltype(f(t))
+{
+ f(t);
+}
+
+int main()
+{
+ g(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58072.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58072.C
new file mode 100644
index 0000000..6d48a55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58072.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+// PR c++/58072
+
+extern 'c'void*blah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+extern L'c'void*Lblah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+extern u'c'void*ublah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+extern U'c'void*Ublah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+
+extern "c"void*strblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern L"c"void*Lstrblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern u"c"void*ustrblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern U"c"void*Ustrblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern u8"c"void*u8strblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+
+extern 123void*ULLblah(void*); // { dg-error "expected unqualified-id before numeric constant" }
+extern 123.456void*Ldblblah(void*); // { dg-error "expected unqualified-id before numeric constant" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58080.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58080.C
new file mode 100644
index 0000000..82f200d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58080.C
@@ -0,0 +1,14 @@
+// PR c++/58080
+// { dg-do compile { target c++11 } }
+
+template<class A, class B>
+struct Eval
+{
+ void foo(A a, B b) { bar(a,b, 0); }
+ auto bar(A a, B b, decltype(a+b)* _) -> decltype(a+b) { return a+b; } // { dg-error "pointer" }
+};
+
+int main()
+{
+ Eval<int,void*> eiv; eiv.foo(0,0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58510.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58510.C
new file mode 100644
index 0000000..71f2520
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58510.C
@@ -0,0 +1,11 @@
+// PR c++/58510
+// { dg-do compile { target c++11 } }
+
+void foo()
+{
+ union
+ { // { dg-error "multiple" }
+ int i = 0;
+ char c = 0;
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58563.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58563.C
new file mode 100644
index 0000000..c9e3e30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58563.C
@@ -0,0 +1,8 @@
+// PR c++/58563
+// { dg-do compile { target c++11 } }
+
+template<int> void foo()
+{
+ enum E {};
+ E().E::~T(); // { dg-error "not a class" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58674.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58674.C
new file mode 100644
index 0000000..fe97c6d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58674.C
@@ -0,0 +1,18 @@
+// PR c++/58674
+// { dg-do compile { target c++11 } }
+
+template<int> struct A {};
+
+template<int N> using B = A<N>;
+
+template<typename T> struct C
+{
+ B<T::i> b; // { dg-error "not usable" }
+};
+
+struct X
+{
+ static const int i;
+};
+
+C<X> c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58707.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58707.C
new file mode 100644
index 0000000..12f2e30
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58707.C
@@ -0,0 +1,6 @@
+// PR c++/58707
+// { dg-do compile { target c++11 } }
+
+template<int i> class TC { };
+constexpr int foo[] = { 42 };
+TC<foo[0 > 1]> bar;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58871.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58871.C
new file mode 100644
index 0000000..5920f5c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr58871.C
@@ -0,0 +1,12 @@
+// PR c++/59111
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct A : virtual T // { dg-error "base type" }
+{
+ A();
+ A(const A&);
+};
+
+template<typename T> A<T>::A(const A<T>&) = default;
+
+A<int> a = A<int>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59111.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59111.C
new file mode 100644
index 0000000..4e48854
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59111.C
@@ -0,0 +1,5 @@
+// PR c++/59111
+// { dg-do compile { target c++11 } }
+
+auto& foo(); // { dg-error "type specifier without trailing return type" "" { target { ! c++1y } } }
+int i = foo(); // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59641.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59641.C
new file mode 100644
index 0000000..36af96a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr59641.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+typedef int T __attribute__((vector_size(2*sizeof(int))));
+
+void foo(T& r, const T& a, const T& b)
+{
+ constexpr T c = a < b; // { dg-error "constant" }
+ r = c ? a : b;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60047.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60047.C
new file mode 100644
index 0000000..ab73e75
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60047.C
@@ -0,0 +1,14 @@
+// PR c++/60047
+// { dg-do compile { target c++11 } }
+
+struct B { };
+
+template<typename T> struct A : virtual B
+{
+ A();
+ A(const A&);
+};
+
+template<typename T> A<T>::A(const A<T>&) = default;
+
+A<int> a = A<int>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60215.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60215.C
new file mode 100644
index 0000000..2970017
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/pr60215.C
@@ -0,0 +1,8 @@
+// PR c++/60215
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ void foo();
+ int i : foo; // { dg-error "width" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
new file mode 100644
index 0000000..ed12655
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
@@ -0,0 +1,9 @@
+// Origin PR c++/51476
+// { dg-do compile { target c++11 } }
+
+template<int> struct A {};
+struct B
+{
+ int i;
+ A<&B::i> a; // { dg-error "could not convert template argument" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for1.C
new file mode 100644
index 0000000..4fecdc7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for1.C
@@ -0,0 +1,16 @@
+// Test for range-based for loop
+// Test the loop with an array
+
+// { dg-do run { target c++11 } }
+
+extern "C" void abort();
+
+int main()
+{
+ int a[] = {1,2,3,4};
+ int sum = 0;
+ for (int x : a)
+ sum += x;
+ if (sum != 10)
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for10.C
new file mode 100644
index 0000000..1397830
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for10.C
@@ -0,0 +1,18 @@
+// PR c++/47388
+// { dg-do compile { target c++11 } }
+// { dg-options "-fno-for-scope" }
+
+template <int>
+void
+foo ()
+{
+ int a[] = { 1, 2, 3, 4 };
+ for (int i : a)
+ ;
+}
+
+void
+bar ()
+{
+ foo <0> ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for11.C
new file mode 100644
index 0000000..d7dde91
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for11.C
@@ -0,0 +1,39 @@
+// Test for range-based for loop
+// Test the loop with a custom iterator
+// with begin/end as member functions
+
+// { dg-do compile { target c++11 } }
+
+struct iterator
+{
+ int x;
+ explicit iterator(int v) :x(v) {}
+ iterator &operator ++() { ++x; return *this; }
+ int operator *() { return x; }
+ bool operator != (const iterator &o) { return x != o.x; }
+};
+
+namespace foo
+{
+ struct container
+ {
+ int min, max;
+ container(int a, int b) :min(a), max(b) {}
+
+ iterator begin()
+ {
+ return iterator(min);
+ }
+ iterator end()
+ {
+ return iterator(max + 1);
+ }
+ };
+}
+
+int main()
+{
+ foo::container c(1,4);
+ for (int it : c)
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for12.C
new file mode 100644
index 0000000..5a2a7d1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for12.C
@@ -0,0 +1,115 @@
+// Test for range-based for loop with templates
+// and begin/end as member functions
+
+// { dg-do run { target c++11 } }
+
+/* Preliminary declarations */
+namespace pre
+{
+ struct iterator
+ {
+ int x;
+ explicit iterator (int v) :x(v) {}
+ iterator &operator ++() { ++x; return *this; }
+ int operator *() { return x; }
+ bool operator != (const iterator &o) { return x != o.x; }
+ };
+
+ struct container
+ {
+ int min, max;
+ container(int a, int b) :min(a), max(b) {}
+ iterator begin() const
+ {
+ return iterator(min);
+ }
+ iterator end() const
+ {
+ return iterator(max);
+ }
+
+ };
+
+} //namespace pre
+
+using pre::container;
+extern "C" void abort(void);
+
+container run_me_just_once()
+{
+ static bool run = false;
+ if (run)
+ abort();
+ run = true;
+ return container(1,2);
+}
+
+/* Template with dependent expression. */
+template<typename T> int test1(const T &r)
+{
+ int t = 0;
+ for (int i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression and dependent declaration. */
+template<typename T> int test2(const container &r)
+{
+ int t = 0;
+ for (T i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression (array) and dependent declaration. */
+template<typename T> int test2(const int (&r)[4])
+{
+ int t = 0;
+ for (T i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression and auto declaration. */
+template<typename T> int test3(const container &r)
+{
+ int t = 0;
+ for (auto i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression (array) and auto declaration. */
+template<typename T> int test3(const int (&r)[4])
+{
+ int t = 0;
+ for (auto i : r)
+ t += i;
+ return t;
+}
+
+int main ()
+{
+ container c(1,5);
+ int a[4] = {5,6,7,8};
+
+ for (auto x : run_me_just_once())
+ ;
+
+ if (test1 (c) != 10)
+ abort();
+ if (test1 (a) != 26)
+ abort();
+
+ if (test2<int> (c) != 10)
+ abort();
+ if (test2<int> (a) != 26)
+ abort();
+
+ if (test3<int> (c) != 10)
+ abort();
+ if (test3<int> (a) != 26)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for13.C
new file mode 100644
index 0000000..ab7bdde
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for13.C
@@ -0,0 +1,102 @@
+// Test for errors in range-based for loops
+// with member begin/end
+
+// { dg-do compile { target c++11 } }
+
+//These should not be used
+template<typename T> int *begin(T &t)
+{
+ T::fail;
+}
+template<typename T> int *end(T &t)
+{
+ T::fail;
+}
+
+struct container1
+{
+ int *begin();
+ //no end
+};
+
+struct container2
+{
+ int *end();
+ //no begin
+};
+
+struct container3
+{
+private:
+ int *begin(); // { dg-error "is private" }
+ int *end(); // { dg-error "is private" }
+};
+
+struct container4
+{
+ int *begin;
+ int *end;
+};
+
+struct container5
+{
+ typedef int *begin;
+ typedef int *end;
+};
+
+struct callable
+{
+ int *operator()();
+};
+
+struct container6
+{
+ callable begin;
+ callable end;
+};
+
+struct container7
+{
+ static callable begin;
+ static callable end;
+};
+
+struct container8
+{
+ static int *begin();
+ int *end();
+};
+
+struct private_callable
+{
+private:
+ int *operator()(); // { dg-error "is private" }
+};
+
+struct container9
+{
+ private_callable begin;
+ private_callable end;
+};
+
+struct container10
+{
+ typedef int *(*function)();
+
+ function begin;
+ static function end;
+};
+
+void test1()
+{
+ for (int x : container1()); // { dg-error "member but not" }
+ for (int x : container2()); // { dg-error "member but not" }
+ for (int x : container3()); // { dg-error "within this context" }
+ for (int x : container4()); // { dg-error "cannot be used as a function" }
+ for (int x : container5()); // { dg-error "invalid use of" }
+ for (int x : container6());
+ for (int x : container7());
+ for (int x : container8());
+ for (int x : container9()); // { dg-error "within this context" }
+ for (int x : container10());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C
new file mode 100644
index 0000000..f43e1ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C
@@ -0,0 +1,94 @@
+// Test for other range-based for loops with
+// begin/end member functions
+
+// { dg-do compile { target c++11 } }
+
+//These should not be used
+template<typename T> int *begin(T &t)
+{
+ T::fail;
+}
+template<typename T> int *end(T &t)
+{
+ T::fail;
+}
+
+//Test for defaults
+
+struct default1
+{
+ int *begin(int x); // { dg-message "note" }
+ int *end();
+};
+
+struct default2
+{
+ int *begin(int x=0);
+ int *end();
+};
+
+struct default3
+{
+ template <typename T> T *begin(); // { dg-message "note" }
+ int *end();
+};
+
+struct default4
+{
+ template <typename T=int> T *begin();
+ int *end();
+};
+
+struct default5
+{
+ template <typename T=int> T *begin(int x=0);
+ int *end();
+};
+
+void test1()
+{
+ for (int x : default1()); // { dg-error "no matching function|note" }
+ for (int x : default2());
+ for (int x : default3()); // { dg-error "no matching function|note" }
+ for (int x : default4());
+ for (int x : default5());
+}
+
+//Inheritance tests
+
+struct base_begin
+{
+ int *begin(); // { dg-message "" }
+};
+
+struct base_end
+{
+ int *end();
+};
+
+struct derived1 : base_begin, base_end
+{
+};
+
+struct base_begin2 : base_begin
+{
+};
+
+struct derived2 : base_begin, base_end, base_begin2 // { dg-warning "" }
+{
+};
+
+struct base_begin3 : virtual base_begin
+{
+};
+
+struct derived3 : virtual base_begin, base_end, base_begin3
+{
+};
+
+void test2()
+{
+ for (int x : derived1());
+ for (int x : derived2()); // { dg-error "is ambiguous" }
+ for (int x : derived3());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for15.C
new file mode 100644
index 0000000..5dd442d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for15.C
@@ -0,0 +1,58 @@
+// Test for range-based for loop with templates
+// and begin/end as member (non-)virtual functions
+
+// { dg-do run { target c++11 } }
+
+unsigned int g;
+
+struct A
+{
+ virtual int *begin()
+ {
+ g |= 1;
+ return 0;
+ }
+ int *end()
+ {
+ g |= 2;
+ return 0;
+ }
+};
+
+struct B : A
+{
+ virtual int *begin()
+ {
+ g |= 4;
+ return 0;
+ }
+ int *end()
+ {
+ g |= 8;
+ return 0;
+ }
+};
+
+extern "C" void abort(void);
+
+int main ()
+{
+ A a;
+ B b;
+ A &aa = b;
+
+ g = 0;
+ for (int x : a);
+ if (g != (1 | 2))
+ abort();
+
+ g = 0;
+ for (int x : b);
+ if (g != (4 | 8))
+ abort();
+
+ g = 0;
+ for (int x : aa);
+ if (g != (4 | 2))
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for16.C
new file mode 100644
index 0000000..bcc09cb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for16.C
@@ -0,0 +1,20 @@
+// Test for range-based for loop with arrays of
+// incomplete type or unknown size
+
+// { dg-do compile { target c++11 } }
+
+extern int a[10];
+extern int b[];
+
+struct S;
+extern S c[10];
+extern S d[];
+
+void test()
+{
+ for (int n : a);
+ for (int n : b); // { dg-error "incomplete type" }
+ for (S &n : c); // { dg-error "incomplete type" }
+ for (S &n : d); // { dg-error "incomplete type" }
+ for (int n : *c); // { dg-error "incomplete type" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for17.C
new file mode 100644
index 0000000..6cc3f9b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for17.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+
+extern "C" int printf (const char *, ...);
+
+enum E { e1, e2, e3, X };
+E operator*(E e) { return e; }
+E begin(E e) { return e; }
+E end(E e) { return X; }
+E operator++(E& e) { return e = E(e+1); }
+
+int main()
+{
+ for (auto e: e1)
+ {
+ printf ("%d ", e);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for18.C
new file mode 100644
index 0000000..be43638
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for18.C
@@ -0,0 +1,16 @@
+// PR c++/48994
+
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct myvec
+{
+ T* begin() const;
+ T* end() const;
+};
+
+void f(const myvec<int>& v)
+{
+ for (int i : v)
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for19.C
new file mode 100644
index 0000000..e3f446f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for19.C
@@ -0,0 +1,10 @@
+// PR c++/49838
+
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ auto a; // { dg-error "no initializer" }
+ for(auto i: a) // { dg-error "deduce" }
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for2.C
new file mode 100644
index 0000000..ea845ee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for2.C
@@ -0,0 +1,40 @@
+// Test for range-based for loop
+// Test the loop with a custom iterator
+// with begin/end in an associated namespace
+
+// { dg-do compile { target c++11 } }
+
+struct iterator
+{
+ int x;
+ explicit iterator(int v) :x(v) {}
+ iterator &operator ++() { ++x; return *this; }
+ int operator *() { return x; }
+ bool operator != (const iterator &o) { return x != o.x; }
+};
+
+namespace foo
+{
+ struct container
+ {
+ int min, max;
+ container(int a, int b) :min(a), max(b) {}
+ };
+
+ iterator begin(container &c)
+ {
+ return iterator(c.min);
+ }
+
+ iterator end(container &c)
+ {
+ return iterator(c.max + 1);
+ }
+}
+
+int main()
+{
+ foo::container c(1,4);
+ for (int it : c)
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for20.C
new file mode 100644
index 0000000..eb3cfe7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for20.C
@@ -0,0 +1,36 @@
+// PR c++/49834
+// PR c++/50020
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template <typename T> T get_value() const;
+};
+
+struct B {
+ A first, second;
+};
+
+struct C
+{
+ B* begin() const;
+ B* end() const;
+};
+
+template <typename Ret>
+struct D
+{
+ Ret f(const C &p)
+ {
+ for (const B &i: p) // OK
+ i.second.get_value<int>();
+ for (const auto &i: p) // ERROR
+ i.second.get_value<int>();
+ return Ret(0);
+ }
+};
+
+void g()
+{
+ D<int>().f(C());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for21.C
new file mode 100644
index 0000000..4990b48
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for21.C
@@ -0,0 +1,8 @@
+// PR c++/49983
+// { dg-do compile { target c++11 } }
+
+template <class T>
+void f(T t)
+{
+ for (auto v : t);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for22.C
new file mode 100644
index 0000000..d4bb360
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for22.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+template<int I> void f() {
+ for (auto i: {I} );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for23.C
new file mode 100644
index 0000000..849682c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for23.C
@@ -0,0 +1,8 @@
+// PR c++/56722
+// { dg-do compile { target c++11 } }
+
+int main()
+{
+ for (const auto& i, 21) // { dg-error "has no initializer|expected" }
+ i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for24.C
new file mode 100644
index 0000000..b4a5b18
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for24.C
@@ -0,0 +1,15 @@
+// PR c++/56794
+// { dg-require-effective-target c++11 }
+
+template<int... values>
+static void Colors()
+{
+ static const int colors[] = { values... };
+
+ for(auto c: colors) { }
+}
+
+int main()
+{
+ Colors<0,1,2> ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for25.C
new file mode 100644
index 0000000..8ba9f65
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for25.C
@@ -0,0 +1,30 @@
+// PR c++/57243
+// { dg-require-effective-target c++11 }
+
+struct snarf
+{
+ template <class T>
+ void get() {}
+};
+
+template <class T>
+struct container
+{
+ snarf * begin() { return nullptr; }
+ snarf * end() { return nullptr; }
+};
+
+template <class T>
+void foo()
+{
+ container<int> arr;
+
+ for( auto i : arr )
+ i.get<int>();
+}
+
+int main()
+{
+ return 0;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for26.C
new file mode 100644
index 0000000..71359cd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for26.C
@@ -0,0 +1,7 @@
+// PR c++/58503
+// { dg-require-effective-target c++11 }
+
+template<int> void foo()
+{
+ for (auto i : 0) {} // { dg-error "there are no arguments" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for27.C
new file mode 100644
index 0000000..a9cfb8e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for27.C
@@ -0,0 +1,15 @@
+// PR c++/58503
+// { dg-require-effective-target c++11 }
+// { dg-options "-fpermissive -w" }
+
+struct c { };
+
+template<int> void foo()
+{
+ for (auto i : c()) { }
+}
+
+c* begin(const c&);
+c* end(const c&);
+
+template void foo<1>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for28.C
new file mode 100644
index 0000000..5007349
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for28.C
@@ -0,0 +1,11 @@
+// PR c++/59165
+// { dg-require-effective-target c++11 }
+
+namespace std {
+int* begin(int i) { return (int*)0; }
+int* end(int i) { return (int*)0; }
+}
+
+int main() {
+ for (int a : 10) { } // { dg-error "was not declared" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for3.C
new file mode 100644
index 0000000..cc6deaf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for3.C
@@ -0,0 +1,41 @@
+// Test for range-based for loop
+// Test the loop with a custom iterator
+// with begin/end in std
+
+// { dg-do compile { target c++11 } }
+
+struct iterator
+{
+ int x;
+ explicit iterator(int v) :x(v) {}
+ iterator &operator ++() { ++x; return *this; }
+ int operator *() { return x; }
+ bool operator != (const iterator &o) { return x != o.x; }
+};
+
+struct container
+{
+ int min, max;
+ container(int a, int b) :min(a), max(b) {}
+};
+
+namespace std
+{
+ iterator begin(container &c)
+ {
+ return iterator(c.min);
+ }
+
+ iterator end(container &c)
+ {
+ return iterator(c.max + 1);
+ }
+}
+
+int main()
+{
+ container c(1,4);
+ for (int it : c) // { dg-error "was not declared" }
+ {
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for4.C
new file mode 100644
index 0000000..8a3117b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for4.C
@@ -0,0 +1,115 @@
+// Test for range-based for loop with templates
+
+// { dg-do run { target c++11 } }
+
+/* Preliminary declarations */
+namespace pre
+{
+ struct iterator
+ {
+ int x;
+ iterator (int v) :x(v) {}
+ iterator &operator ++() { ++x; return *this; }
+ int operator *() { return x; }
+ bool operator != (const iterator &o) { return x != o.x; }
+ };
+
+ struct container
+ {
+ int min, max;
+ container(int a, int b) :min(a), max(b) {}
+ };
+
+ iterator begin(const container &c)
+ {
+ return iterator(c.min);
+ }
+
+ iterator end(const container &c)
+ {
+ return iterator(c.max);
+ }
+
+} //namespace pre
+
+using pre::container;
+extern "C" void abort(void);
+
+container run_me_just_once()
+{
+ static bool run = false;
+ if (run)
+ abort();
+ run = true;
+ return container(1,2);
+}
+
+/* Template with dependent expression. */
+template<typename T> int test1(const T &r)
+{
+ int t = 0;
+ for (int i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression and dependent declaration. */
+template<typename T> int test2(const container &r)
+{
+ int t = 0;
+ for (T i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression (array) and dependent declaration. */
+template<typename T> int test2(const int (&r)[4])
+{
+ int t = 0;
+ for (T i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression and auto declaration. */
+template<typename T> int test3(const container &r)
+{
+ int t = 0;
+ for (auto i : r)
+ t += i;
+ return t;
+}
+
+/* Template with non-dependent expression (array) and auto declaration. */
+template<typename T> int test3(const int (&r)[4])
+{
+ int t = 0;
+ for (auto i : r)
+ t += i;
+ return t;
+}
+
+int main ()
+{
+ container c(1,5);
+ int a[4] = {5,6,7,8};
+
+ for (auto x : run_me_just_once())
+ ;
+
+ if (test1 (c) != 10)
+ abort();
+ if (test1 (a) != 26)
+ abort();
+
+ if (test2<int> (c) != 10)
+ abort();
+ if (test2<int> (a) != 26)
+ abort();
+
+ if (test3<int> (c) != 10)
+ abort();
+ if (test3<int> (a) != 26)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for5.C
new file mode 100644
index 0000000..bf04406
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for5.C
@@ -0,0 +1,53 @@
+// Test for errors in range-based for loops
+
+// { dg-do compile { target c++11 } }
+
+struct container
+{
+};
+
+int *begin(const container &c)
+{
+ return 0;
+}
+
+int end(const container &c) //Ops! wrong type
+{
+ return 0;
+}
+
+
+struct Implicit
+{
+ Implicit(int x)
+ {}
+};
+struct Explicit
+{
+ explicit Explicit(int x)
+ {}
+};
+
+void test1()
+{
+ container c;
+ for (int x : c) // { dg-error "inconsistent|conversion" }
+ ;
+
+ int a[2] = {1,2};
+ for (Implicit x : a)
+ ;
+ for (Explicit x : a) // { dg-error "conversion" }
+ ;
+ for (const Implicit &x : a)
+ ;
+ for (Implicit &&x : a)
+ ;
+
+ //Check the correct scopes
+ int i;
+ for (int i : a) // { dg-message "previously declared" }
+ {
+ int i; // { dg-error "redeclaration" }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for6.C
new file mode 100644
index 0000000..366499a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for6.C
@@ -0,0 +1,28 @@
+// Test for range-based for loop
+// Test the loop with an initializer_list
+
+// { dg-do run { target c++11 } }
+
+#include <initializer_list>
+
+extern "C" void abort();
+
+template<typename T> T foo()
+{
+ T sum = 0;
+ for (T x : {T(1),T(2),T(3),T(4)})
+ sum += x;
+ if (sum != T(10))
+ abort();
+}
+
+int main()
+{
+ int sum = 0;
+ for (int x : {1,2,3,4})
+ sum += x;
+ if (sum != 10)
+ abort();
+
+ foo<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for7.C
new file mode 100644
index 0000000..3e88362
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for7.C
@@ -0,0 +1,116 @@
+// PR c++/46056
+// Check that range-based for loop calls destructors
+// when required
+// { dg-do run { target c++11 } }
+extern "C" void abort();
+
+int value_counter = 0, it_counter = 0, seq_counter = 0;
+
+struct Int
+{
+ int x;
+ Int(int v)
+ :x(v)
+ {
+ ++value_counter;
+ }
+ Int(const Int &o)
+ :x(o.x)
+ {
+ ++value_counter;
+ }
+ ~Int()
+ {
+ --value_counter;
+ }
+};
+
+struct iterator
+{
+ int x;
+ iterator(int v)
+ :x(v)
+ {
+ ++it_counter;
+ }
+ iterator(const iterator &o)
+ :x(o.x)
+ {
+ ++it_counter;
+ }
+ ~iterator()
+ {
+ --it_counter;
+ }
+ iterator &operator ++() { ++x; return *this; }
+ int operator *() { return x; }
+ bool operator != (const iterator &o) { return x != o.x; }
+};
+
+struct container
+{
+ int min, max;
+ container(int a, int b) :min(a), max(b)
+ {
+ ++seq_counter;
+ }
+ container(const container &) = delete;
+ ~container()
+ {
+ --seq_counter;
+ }
+};
+
+iterator begin(container &c)
+{
+ return iterator(c.min);
+}
+
+iterator end(container &c)
+{
+ return iterator(c.max + 1);
+}
+
+int main()
+{
+ for (Int x : container(0, 10))
+ {
+ if (value_counter != 1) abort();
+ if (it_counter != 2) abort();
+ if (seq_counter != 1) abort();
+ }
+ if (value_counter != 0) abort();
+ if (it_counter != 0) abort();
+ if (seq_counter != 0) abort();
+
+ try
+ {
+ for (Int x : container(0, 10))
+ {
+ if (value_counter != 1) abort();
+ if (it_counter != 2) abort();
+ if (seq_counter != 1) abort();
+ }
+ if (value_counter != 0) abort();
+ if (it_counter != 0) abort();
+ if (seq_counter != 0) abort();
+
+ for (Int x : container(0, 10))
+ {
+ if (value_counter != 1) abort();
+ if (it_counter != 2) abort();
+ if (seq_counter != 1) abort();
+
+ if (x.x == 5)
+ throw 0;
+ }
+ }
+ catch (int)
+ {
+ if (value_counter != 0) abort();
+ if (it_counter != 0) abort();
+ if (seq_counter != 0) abort();
+ }
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for8.C
new file mode 100644
index 0000000..a389f66
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for8.C
@@ -0,0 +1,15 @@
+// Test for range-based for loop when the declarator declares
+// a new type
+
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+void test()
+{
+ for (struct S { } *x : { (S*)0, (S*)0 } )
+ ;
+
+ for (struct S { } x : { S(), S() } )
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for9.C
new file mode 100644
index 0000000..c51cbf9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for9.C
@@ -0,0 +1,11 @@
+// Test for range-based for loop error in C++98 mode
+
+// { dg-do compile }
+// { dg-options "-std=c++98" }
+
+void test()
+{
+ int a[] = {0,1,2};
+ for (int x : a) // { dg-error "range-based 'for'" }
+ ;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C
new file mode 100644
index 0000000..c6ef079
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C
@@ -0,0 +1,37 @@
+// PR c++/56821
+// { dg-require-effective-target c++11 }
+
+struct A {
+ // { dg-final { scan-assembler "_ZNR1A1fEv" } }
+ void f() & {}
+ // { dg-final { scan-assembler "_ZNO1A1gEv" } }
+ void g() && {}
+ // { dg-final { scan-assembler "_ZNKR1A1hEv" } }
+ void h() const & {}
+};
+
+// { dg-final { scan-assembler "_Z1jM1AFvvRE" } }
+void j(void (A::*)() &) { }
+// { dg-final { scan-assembler "_Z1kM1AFvvOE" } }
+void k(void (A::*)() &&) { }
+// { dg-final { scan-assembler "_Z1lM1AKFvvRE" } }
+void l(void (A::*)() const &) { }
+
+// { dg-final { scan-assembler "_Z1mIFvvOEEvM1AT_" } }
+// { dg-final { scan-assembler "_Z1mIFvvREEvM1AT_" } }
+// { dg-final { scan-assembler "_Z1mIKFvvREEvM1AT_" } }
+template <typename T>
+void m(T A::*) {}
+
+// { dg-final { scan-assembler "_Z1nIM1AFvvOEEvT_" } }
+// { dg-final { scan-assembler "_Z1nIM1AFvvREEvT_" } }
+// { dg-final { scan-assembler "_Z1nIM1AKFvvREEvT_" } }
+template <typename T>
+void n(T) {}
+
+int main()
+{
+ j(&A::f); k(&A::g); l(&A::h);
+ m(&A::f); m(&A::g); m(&A::h);
+ n(&A::f); n(&A::g); n(&A::h);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C
new file mode 100644
index 0000000..5be8942
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual-multi-neg.C
@@ -0,0 +1,7 @@
+// { dg-require-effective-target c++11 }
+
+class Foo
+{
+public:
+ void bar() const && & { } // { dg-error "multiple ref-qualifiers" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C
new file mode 100644
index 0000000..7fa826c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C
@@ -0,0 +1,30 @@
+// { dg-require-effective-target c++11 }
+
+template <class,class> struct ST;
+template <class T> struct ST<T,T> {};
+
+struct A
+{
+ int f() &;
+ char f() &&;
+};
+
+template <class T> struct B
+{
+ int f() &;
+ char f() &&;
+};
+
+int main()
+{
+ A a;
+ a.f();
+ A().f();
+ ST<decltype(a.f()), int>();
+ ST<decltype(A().f()), char>();
+ B<int> b;
+ b.f();
+ B<int>().f();
+ ST<decltype(b.f()), int>();
+ ST<decltype(B<int>().f()), char>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C
new file mode 100644
index 0000000..1b6c54f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C
@@ -0,0 +1,13 @@
+// PR c++/57252
+// { dg-require-effective-target c++11 }
+
+struct foo {
+ void bar() & {}
+ void bar() && {}
+};
+
+int main()
+{
+ auto p = &foo::bar; // { dg-error "" }
+ (foo{}.*p)();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C
new file mode 100644
index 0000000..15dd049
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C
@@ -0,0 +1,10 @@
+// PR c++/57253
+// { dg-require-effective-target c++11 }
+
+template<typename T> struct foo;
+
+template<> struct foo<void()&> {};
+template<> struct foo<void()> {};
+
+int main()
+{}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C
new file mode 100644
index 0000000..b0a16fe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C
@@ -0,0 +1,22 @@
+// PR c++/57254
+// { dg-require-effective-target c++11 }
+
+struct foo {
+ template<typename T>
+ void bar(T) &;
+
+ template<typename T>
+ void bar(T) &&;
+};
+
+template<typename T>
+void foo::bar(T) & {}
+
+template<typename T>
+void foo::bar(T) && {}
+
+int main()
+{
+ foo f;
+ f.bar(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C
new file mode 100644
index 0000000..84d3b0f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C
@@ -0,0 +1,29 @@
+// PR c++/57388
+// { dg-require-effective-target c++11 }
+
+template<class> struct A
+{
+ static constexpr bool value = false;
+};
+
+template<class Res, class... Args>
+struct A<Res(Args...)>
+{
+ static constexpr bool value = true;
+};
+
+template<class Res, class... Args>
+struct A<Res(Args...) const &>
+{
+ static constexpr bool value = true;
+};
+
+template<class Res, class... Args>
+struct A<Res(Args...) const &&>
+{
+ static constexpr bool value = true;
+};
+
+static_assert(A<void()>::value, "Ouch");
+static_assert(A<void() const &>::value, ""); // #1
+static_assert(A<void() const &&>::value, ""); // #2
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual14.C
new file mode 100644
index 0000000..8e55551
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual14.C
@@ -0,0 +1,18 @@
+// PR c++/57825
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct target_class
+{};
+
+template<typename Class, typename Ret, typename... Args>
+struct target_class<Ret (Class::*)(Args...)>
+{};
+
+template<typename Class, typename Ret, typename... Args>
+struct target_class<Ret (Class::*)(Args...) &>
+{};
+
+template<typename Class, typename Ret, typename... Args>
+struct target_class<Ret (Class::*)(Args...) &&>
+{};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C
new file mode 100644
index 0000000..fa09ab4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C
@@ -0,0 +1,75 @@
+// In a .* expression whose object expression is an rvalue, the program is
+// ill-formed if the second operand is a pointer to member function with
+// ref-qualifier &. In a .* expression whose object expression is an
+// lvalue, the program is ill-formed if the second operand is a pointer to
+// member function with ref-qualifier &&.
+
+// { dg-require-effective-target c++11 }
+
+struct A {
+ void f() &;
+ void g() &&;
+ void h();
+};
+
+void one()
+{
+ A a;
+
+ void (A::*p)() & = &A::f;
+ (a.*p)();
+ (A().*p)(); // { dg-error "" }
+
+ p = &A::g; // { dg-error "" }
+ p = &A::h; // { dg-error "" }
+
+ void (A::*p2)() && = &A::g;
+ (A().*p2)();
+ (a.*p2)(); // { dg-error "" }
+ p2 = &A::f; // { dg-error "" }
+ p2 = &A::h; // { dg-error "" }
+
+ void (A::*p3)() = &A::h;
+ (a.*p3)();
+ (A().*p3)();
+ p3 = &A::f; // { dg-error "" }
+ p3 = &A::g; // { dg-error "" }
+}
+
+template <class T>
+struct B {
+ void f() &;
+ void g() &&;
+ void h();
+};
+
+template <class T>
+void two()
+{
+ B<T> a;
+
+ void (B<T>::*p)() & = &B<T>::f;
+ (a.*p)();
+ (B<T>().*p)(); // { dg-error "" }
+
+ p = &B<T>::g; // { dg-error "" }
+ p = &B<T>::h; // { dg-error "" }
+
+ void (B<T>::*p2)() && = &B<T>::g;
+ (B<T>().*p2)();
+ (a.*p2)(); // { dg-error "" }
+ p2 = &B<T>::f; // { dg-error "" }
+ p2 = &B<T>::h; // { dg-error "" }
+
+ void (B<T>::*p3)() = &B<T>::h;
+ (a.*p3)();
+ (B<T>().*p3)();
+ p3 = &B<T>::f; // { dg-error "" }
+ p3 = &B<T>::g; // { dg-error "" }
+}
+
+int main()
+{
+ one();
+ two<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C
new file mode 100644
index 0000000..1b21196
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C
@@ -0,0 +1,29 @@
+// An explicitly defaulted function can have a ref-qualifier.
+
+// { dg-require-effective-target c++11 }
+
+struct A {
+ A& operator=(const A&) & = default;
+};
+
+template<class T>
+struct B {
+ B& operator=(const B&) & = default;
+};
+
+template<class T>
+void f()
+{
+ B<T> b;
+ b = B<T>();
+ B<T>() = b; // { dg-error "" }
+}
+
+int main()
+{
+ A a;
+ a = A();
+ A() = a; // { dg-error "" }
+
+ f<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C
new file mode 100644
index 0000000..5a0ee16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C
@@ -0,0 +1,14 @@
+// 12.1: A constructor shall not be declared with a ref-qualifier.
+// 12.4: A destructor shall not be declared with a ref-qualifier.
+
+// { dg-require-effective-target c++11 }
+
+struct A {
+ A() & = default; // { dg-error "constructor" }
+ ~A() & = default; // { dg-error "destructor" }
+};
+
+int main()
+{
+ A a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C
new file mode 100644
index 0000000..e3d26e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C
@@ -0,0 +1,13 @@
+// 13.1: ...cannot be overloaded if any of them, but not all, have a
+// ref-qualifier.
+
+// { dg-require-effective-target c++11 }
+
+class Y {
+ void h() &;
+ void h() const &; // OK
+ void h() &&; // OK, all declarations have a ref-qualifier
+ void i() &; // { dg-message "" }
+ void i() const; // { dg-error "" } prior declaration of i
+ // has a ref-qualifier
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C
new file mode 100644
index 0000000..02e3f6e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C
@@ -0,0 +1,15 @@
+// Binding an rvalue to && beats binding it to const& (13.3.3.2).
+
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ int operator+(int) &&;
+};
+
+void operator+ (const A&, int);
+
+int main()
+{
+ return A() + 42;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C
new file mode 100644
index 0000000..2430665
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C
@@ -0,0 +1,19 @@
+// typedef test
+// { dg-require-effective-target c++11 }
+
+typedef void F() &;
+
+F f; // { dg-error "" }
+F* p; // { dg-error "" }
+extern F& r; // { dg-error "" }
+
+struct A {
+ F f;
+};
+
+int main()
+{
+ A a;
+ a.f();
+ A().f(); // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C
new file mode 100644
index 0000000..b4c972b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C
@@ -0,0 +1,13 @@
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ virtual void f() & = 0;
+};
+
+struct B: A
+{
+ void f(); // doesn't override
+};
+
+B b; // { dg-error "abstract" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C
new file mode 100644
index 0000000..cdb8d68
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C
@@ -0,0 +1,14 @@
+// PR c++/57064
+// { dg-require-effective-target c++11 }
+
+template <class T> T&& move(T& t);
+
+struct A {
+ void p() &;
+ int p() &&;
+};
+
+void g(A &&a)
+{
+ int i = move(a).p();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reference_collapsing.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reference_collapsing.C
new file mode 100644
index 0000000..3de8f96
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reference_collapsing.C
@@ -0,0 +1,174 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test the reference collapsing rules. Note that there are recent differences
+// for how cv-qualifications are applied to reference types. 7.1.3, 14.3.1
+
+// { dg-do compile { target c++11 } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+template <class T, T v>
+struct integral_constant
+{
+ static const T value = v;
+ typedef T value_type;
+ typedef integral_constant<T, v> type;
+};
+
+typedef integral_constant<bool, true> true_type;
+typedef integral_constant<bool, false> false_type;
+
+template <class T> struct is_lvalue_reference : public integral_constant<bool, false> {};
+template <class T> struct is_lvalue_reference<T&> : public integral_constant<bool, true> {};
+
+template <class T> struct is_rvalue_reference : public integral_constant<bool, false> {};
+template <class T> struct is_rvalue_reference<T&&> : public integral_constant<bool, true> {};
+
+template <class T> struct remove_reference {typedef T type;};
+template <class T> struct remove_reference<T&> {typedef T type;};
+template <class T> struct remove_reference<T&&> {typedef T type;};
+
+template <class T> struct is_const : public integral_constant<bool, false> {};
+template <class T> struct is_const<T const> : public integral_constant<bool, true> {};
+
+template <class T> struct is_volatile : public integral_constant<bool, false> {};
+template <class T> struct is_volatile<T volatile> : public integral_constant<bool, true> {};
+
+struct A {};
+
+typedef A& Alref;
+typedef const A& cAlref;
+typedef volatile A& vAlref;
+typedef const volatile A& cvAlref;
+
+typedef A&& Arref;
+typedef const A&& cArref;
+typedef volatile A&& vArref;
+typedef const volatile A&& cvArref;
+
+template <class T, bool is_lvalue_ref, bool is_rvalue_ref, bool s_const, bool s_volatile>
+void test()
+{
+ sa<is_lvalue_reference<T>::value == is_lvalue_ref> t1;
+ sa<is_rvalue_reference<T>::value == is_rvalue_ref> t2;
+ sa<is_const <typename remove_reference<T>::type>::value == s_const> t3;
+ sa<is_volatile<typename remove_reference<T>::type>::value == s_volatile> t4;
+ sa<is_const <typename remove_reference<const T>::type>::value == s_const > t5;
+ sa<is_volatile<typename remove_reference< volatile T>::type>::value == s_volatile> t6;
+}
+
+int main()
+{
+ // sanity check
+ test< A&, true, false, false, false>();
+ test<const A&, true, false, true, false>();
+ test< volatile A&, true, false, false, true>();
+ test<const volatile A&, true, false, true, true>();
+ test< A&&, false, true, false, false>();
+ test<const A&&, false, true, true, false>();
+ test< volatile A&&, false, true, false, true>();
+ test<const volatile A&&, false, true, true, true>();
+
+// lvalue reference test
+
+ // Alref
+ test< Alref&, true, false, false, false>();
+ test<const Alref&, true, false, false, false>();
+ test< volatile Alref&, true, false, false, false>();
+ test<const volatile Alref&, true, false, false, false>();
+
+ // cAlref
+ test< cAlref&, true, false, true, false>();
+ test<const cAlref&, true, false, true, false>();
+ test< volatile cAlref&, true, false, true, false>();
+ test<const volatile cAlref&, true, false, true, false>();
+
+ // vAlref
+ test< vAlref&, true, false, false, true>();
+ test<const vAlref&, true, false, false, true>();
+ test< volatile vAlref&, true, false, false, true>();
+ test<const volatile vAlref&, true, false, false, true>();
+
+ // cvAlref
+ test< cvAlref&, true, false, true, true>();
+ test<const cvAlref&, true, false, true, true>();
+ test< volatile cvAlref&, true, false, true, true>();
+ test<const volatile cvAlref&, true, false, true, true>();
+
+ // Arref
+ test< Arref&, true, false, false, false>();
+ test<const Arref&, true, false, false, false>();
+ test< volatile Arref&, true, false, false, false>();
+ test<const volatile Arref&, true, false, false, false>();
+
+ // cArref
+ test< cArref&, true, false, true, false>();
+ test<const cArref&, true, false, true, false>();
+ test< volatile cArref&, true, false, true, false>();
+ test<const volatile cArref&, true, false, true, false>();
+
+ // vArref
+ test< vArref&, true, false, false, true>();
+ test<const vArref&, true, false, false, true>();
+ test< volatile vArref&, true, false, false, true>();
+ test<const volatile vArref&, true, false, false, true>();
+
+ // vArref
+ test< cvArref&, true, false, true, true>();
+ test<const cvArref&, true, false, true, true>();
+ test< volatile cvArref&, true, false, true, true>();
+ test<const volatile cvArref&, true, false, true, true>();
+
+// rvalue reference test
+
+ // Alref
+ test< Alref&&, true, false, false, false>();
+ test<const Alref&&, true, false, false, false>();
+ test< volatile Alref&&, true, false, false, false>();
+ test<const volatile Alref&&, true, false, false, false>();
+
+ // cAlref
+ test< cAlref&&, true, false, true, false>();
+ test<const cAlref&&, true, false, true, false>();
+ test< volatile cAlref&&, true, false, true, false>();
+ test<const volatile cAlref&&, true, false, true, false>();
+
+ // vAlref
+ test< vAlref&&, true, false, false, true>();
+ test<const vAlref&&, true, false, false, true>();
+ test< volatile vAlref&&, true, false, false, true>();
+ test<const volatile vAlref&&, true, false, false, true>();
+
+ // cvAlref
+ test< cvAlref&&, true, false, true, true>();
+ test<const cvAlref&&, true, false, true, true>();
+ test< volatile cvAlref&&, true, false, true, true>();
+ test<const volatile cvAlref&&, true, false, true, true>();
+
+ // Arref
+ test< Arref&&, false, true, false, false>();
+ test<const Arref&&, false, true, false, false>();
+ test< volatile Arref&&, false, true, false, false>();
+ test<const volatile Arref&&, false, true, false, false>();
+
+ // cArref
+ test< cArref&&, false, true, true, false>();
+ test<const cArref&&, false, true, true, false>();
+ test< volatile cArref&&, false, true, true, false>();
+ test<const volatile cArref&&, false, true, true, false>();
+
+ // vArref
+ test< vArref&&, false, true, false, true>();
+ test<const vArref&&, false, true, false, true>();
+ test< volatile vArref&&, false, true, false, true>();
+ test<const volatile vArref&&, false, true, false, true>();
+
+ // cvArref
+ test< cvArref&&, false, true, true, true>();
+ test<const cvArref&&, false, true, true, true>();
+ test< volatile cvArref&&, false, true, true, true>();
+ test<const volatile cvArref&&, false, true, true, true>();
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reinterpret_cast1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reinterpret_cast1.C
new file mode 100644
index 0000000..7c0463e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/reinterpret_cast1.C
@@ -0,0 +1,6 @@
+// PR c++/57869
+// { dg-do compile { target c++11 } }
+
+void* po = 0;
+void (*pf)() = reinterpret_cast<decltype(pf)>(po);
+static_assert(sizeof(po) >= sizeof(pf), "Conversion not supported");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C
new file mode 100644
index 0000000..ce93a16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ int i : 1;
+};
+
+int main()
+{
+ A a;
+ static_cast<int&&>(a.i);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C
new file mode 100644
index 0000000..9ca17f2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C
@@ -0,0 +1,17 @@
+// PR c++/51868
+// { dg-do compile { target c++11 } }
+
+struct A {
+ A() {}
+ A(const A&) {}
+ A(A&&) {}
+};
+
+struct B {
+ A a;
+ int f : 1;
+};
+
+B func() {
+ return B();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast.C
new file mode 100644
index 0000000..4b46c54
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+void f(int i)
+{
+ int&& r = static_cast<int&&>(i);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast2.C
new file mode 100644
index 0000000..6dc5abc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast2.C
@@ -0,0 +1,21 @@
+// Test for const_cast to reference (5.2.11/4).
+// { dg-do compile { target c++11 } }
+
+template <class T> T&& xval();
+template <class T> T& lval();
+template <class T> T prval();
+
+struct A { };
+
+int main()
+{
+ const_cast<int&>(lval<int>());
+ const_cast<int&>(xval<int>()); // { dg-error "" }
+ const_cast<int&>(prval<int>()); // { dg-error "" }
+ const_cast<int&&>(lval<int>());
+ const_cast<int&&>(xval<int>());
+ const_cast<int&&>(prval<int>()); // { dg-error "" }
+ const_cast<A&&>(lval<A>());
+ const_cast<A&&>(xval<A>());
+ const_cast<A&&>(prval<A>());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
new file mode 100644
index 0000000..6c70324
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
@@ -0,0 +1,17 @@
+// PR c++/51406
+// { dg-do run { target c++11 } }
+
+extern "C" int printf(const char *,...);
+extern "C" void abort();
+
+struct A { int a; A() : a(1) {} };
+struct B { int b; B() : b(2) {} };
+struct X : A, B {};
+
+int main() {
+ X x;
+ int a=static_cast<A&&>(x).a;
+ int b=static_cast<B&&>(x).b;
+ // printf ("%d %d\n", a, b);
+ if (a!=1 || b!=2) abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
new file mode 100644
index 0000000..13f369d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
@@ -0,0 +1,13 @@
+// PR c++/51161
+// { dg-do compile { target c++11 } }
+
+struct A{};
+struct B : A{};
+struct C : A{};
+struct D : B, C{};
+
+int main()
+{
+ D d;
+ static_cast<A &&>(d); // { dg-error "ambiguous" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-conv1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-conv1.C
new file mode 100644
index 0000000..3482766
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-conv1.C
@@ -0,0 +1,9 @@
+// PR c++/49267
+// { dg-do compile { target c++11 } }
+
+struct X {
+ operator int&();
+ operator int&&();
+};
+
+int&&x = X();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C
new file mode 100644
index 0000000..70d3d71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-copy1.C
@@ -0,0 +1,10 @@
+// PR c++/55017
+// { dg-do compile { target c++11 } }
+
+struct S { // { dg-error "rvalue ref" }
+ int&& rr;
+ S(int&& rr) : rr(static_cast<int&&>(rr)) {}
+};
+
+S s1(13);
+S s2 = s1; // { dg-error "deleted" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce.C
new file mode 100644
index 0000000..ce06d13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce.C
@@ -0,0 +1,8 @@
+// PR c++/36816, core issue 873
+// { dg-do compile { target c++11 } }
+
+template <class T> void h (T&&) { }
+
+void (*pf)(int&) = &h;
+template <> void h(char&);
+template void h(double&);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C
new file mode 100644
index 0000000..ecaaf38
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C
@@ -0,0 +1,18 @@
+// PR c++/48313
+// { dg-do compile { target c++11 } }
+
+template<typename F>
+void f(F&&) { }
+
+void g() { }
+
+template<typename T> void h() { }
+
+int main()
+{
+ f( g ); // OK
+ void (&p)() = h<int>;
+ f( p ); // OK
+ f( h<int> ); // ???
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
new file mode 100644
index 0000000..7834be5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
@@ -0,0 +1,13 @@
+// PR c++/49389
+// { dg-do compile { target c++11 } }
+
+template<class T> T&& val();
+
+struct A {};
+
+typedef decltype(val<A>().*val<int A::*>()) type;
+
+template<class> struct assert_type;
+template<> struct assert_type<int&&> {};
+
+assert_type<type> test;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func.C
new file mode 100644
index 0000000..e97fe3d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func.C
@@ -0,0 +1,22 @@
+// PR c++/48457, Core 1238
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& create();
+
+template<class T, class Arg>
+void test() {
+ T t(create<Arg>());
+ (void) t;
+}
+
+void f (void (&)());
+void f (void (&&)());
+
+int main() {
+ test<void(&)(), void()>();
+ test<void(&&)(), void()>();
+ // This call should choose the lvalue reference overload.
+ // { dg-final { scan-assembler-not "_Z1fOFvvE" } }
+ f(create<void()>());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func2.C
new file mode 100644
index 0000000..cfa0b21
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func2.C
@@ -0,0 +1,10 @@
+// PR c++/49458
+// { dg-do compile { target c++11 } }
+
+typedef void ftype();
+
+struct A {
+ operator ftype&(void);
+};
+
+ftype &&frvref = A();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func3.C
new file mode 100644
index 0000000..6738303
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-func3.C
@@ -0,0 +1,10 @@
+// DR 1328
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A {
+ operator T&(); // #1
+ operator T&&(); // #2
+};
+typedef int Fn();
+A<Fn> a;
+Fn&& f = a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C
new file mode 100644
index 0000000..1ca3c41
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-lvalue-req.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+template <class T> T&& declval();
+
+int main()
+{
+ &declval<int>(); // { dg-error "xvalue" }
+ declval<int>() = declval<int>(); // { dg-error "xvalue" }
+ declval<int>()++; // { dg-error "xvalue" }
+ --declval<int>(); // { dg-error "xvalue" }
+ declval<int>() += 1; // { dg-error "xvalue" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C
new file mode 100644
index 0000000..b55b67a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C
@@ -0,0 +1,10 @@
+// { dg-do run { target c++11 } }
+
+void f(int &);
+void f(int &&ir) { ir = 42; }
+int main()
+{
+ int x;
+ f(reinterpret_cast<int&&>(x));
+ return (x != 42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-restrict.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-restrict.C
new file mode 100644
index 0000000..11bf4de
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-restrict.C
@@ -0,0 +1,6 @@
+// PR c++/45401
+// { dg-do compile { target c++11 } }
+
+typedef int &__restrict restrictLvref;
+typedef restrictLvref &&rvrefToRestrictLvref;
+typedef restrictLvref rvrefToRestrictLvref;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-return.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-return.C
new file mode 100644
index 0000000..12a15aa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-return.C
@@ -0,0 +1,18 @@
+// PR c++/41815
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U> struct same_type;
+template<typename T> struct same_type<T, T> {};
+
+int const f() { return 0; }
+
+int &&r = f(); // binding "int&&" to "int" should succeed
+same_type<decltype(f()), int> s1;
+same_type<decltype(0,f()), int> s2;
+
+template <class T>
+T const g() { return 0; }
+
+int &&r2 = g<int>();
+same_type<decltype(g<int>()), int> s3;
+same_type<decltype(0,g<int>()), int> s4;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-template1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-template1.C
new file mode 100644
index 0000000..dcc4e5e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-template1.C
@@ -0,0 +1,11 @@
+// PR c++/44870
+// { dg-do compile { target c++11 } }
+
+void foo(int&& data);
+
+template <typename T>
+void bar(T t)
+{ foo(int()); }
+
+void baz()
+{ bar(0); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-this.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-this.C
new file mode 100644
index 0000000..8064a51
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-this.C
@@ -0,0 +1,7 @@
+// PR c++/56701
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ void f(){ A*&& a = this; }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
new file mode 100644
index 0000000..b729dc8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++11 } }
+// PR c++/33235
+#include <cassert>
+
+int move_construct = 0;
+int move_assign = 0;
+
+struct base2 // { dg-message "declares a move" }
+{
+ base2() {}
+ base2(base2&&) {++move_construct;}
+ base2& operator=(base2&&) {++move_assign; return *this;}
+};
+
+int test2()
+{
+ base2 b;
+ base2 b2(b); // { dg-error "deleted" }
+ assert(move_construct == 0);
+ base2 b3(static_cast<base2&&>(b));
+ base2 b4 = static_cast<base2&&>(b);
+ assert(move_construct == 2);
+ b = b2; // { dg-error "deleted" }
+ assert(move_assign == 0);
+ b = static_cast<base2&&>(b2);
+ assert(move_assign == 1);
+}
+
+int main()
+{
+ test2();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv10.C
new file mode 100644
index 0000000..bba72d2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv10.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A() = default;
+ A(const A&) = delete;
+};
+
+A&& f();
+void h(A&&);
+void g()
+{
+ A&& arr = f();
+ h(f());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1n.C
new file mode 100644
index 0000000..9aa534a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1n.C
@@ -0,0 +1,168 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 1 at a time
+
+one sink_1_1( A&); // { dg-message "" }
+
+int test1_1()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_1(ca); // { dg-error "invalid initialization" }
+ sink_1_1(va); // { dg-error "invalid initialization" }
+ sink_1_1(cva); // { dg-error "invalid initialization" }
+ sink_1_1(source()); // { dg-error "invalid initialization" }
+ sink_1_1(c_source()); // { dg-error "invalid initialization" }
+ sink_1_1(v_source()); // { dg-error "invalid initialization" }
+ sink_1_1(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+two sink_1_2(const A&); // { dg-message "" }
+
+int test1_2()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_2(va); // { dg-error "invalid initialization" }
+ sink_1_2(cva); // { dg-error "invalid initialization" }
+ sink_1_2(v_source()); // { dg-error "invalid initialization" }
+ sink_1_2(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+three sink_1_3(volatile A&); // { dg-message "" }
+
+int test1_3()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_3(ca); // { dg-error "invalid initialization" }
+ sink_1_3(cva); // { dg-error "invalid initialization" }
+ sink_1_3(source()); // { dg-error "invalid initialization" }
+ sink_1_3(c_source()); // { dg-error "invalid initialization" }
+ sink_1_3(v_source()); // { dg-error "invalid initialization" }
+ sink_1_3(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+four sink_1_4(const volatile A&); // { dg-message "" }
+
+int test1_4()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_4(source()); // { dg-error "invalid initialization" }
+ sink_1_4(c_source()); // { dg-error "invalid initialization" }
+ sink_1_4(v_source()); // { dg-error "invalid initialization" }
+ sink_1_4(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+five sink_1_5( A&&); // { dg-message "" }
+
+int test1_5()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_5(a); // { dg-error "lvalue" }
+ sink_1_5(ca); // { dg-error "invalid initialization" }
+ sink_1_5(va); // { dg-error "invalid initialization" }
+ sink_1_5(cva); // { dg-error "invalid initialization" }
+ sink_1_5(c_source()); // { dg-error "invalid initialization" }
+ sink_1_5(v_source()); // { dg-error "invalid initialization" }
+ sink_1_5(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+six sink_1_6(const A&&); // { dg-message "" }
+
+int test1_6()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_6(a); // { dg-error "lvalue" }
+ sink_1_6(ca); // { dg-error "lvalue" }
+ sink_1_6(va); // { dg-error "invalid initialization" }
+ sink_1_6(cva); // { dg-error "invalid initialization" }
+ sink_1_6(v_source()); // { dg-error "invalid initialization" }
+ sink_1_6(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+seven sink_1_7(volatile A&&); // { dg-message "" }
+
+int test1_7()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_7(a); // { dg-error "lvalue" }
+ sink_1_7(ca); // { dg-error "invalid initialization" }
+ sink_1_7(va); // { dg-error "lvalue" }
+ sink_1_7(cva); // { dg-error "invalid initialization" }
+ sink_1_7(c_source()); // { dg-error "invalid initialization" }
+ sink_1_7(cv_source()); // { dg-error "invalid initialization" }
+ return 0;
+}
+
+eight sink_1_8(const volatile A&&); // { dg-message "" }
+
+int test1_8()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_1_8(a); // { dg-error "lvalue" }
+ sink_1_8(ca); // { dg-error "lvalue" }
+ sink_1_8(va); // { dg-error "lvalue" }
+ sink_1_8(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+int main()
+{
+ return test1_1() + test1_2() + test1_3() + test1_5() +
+ test1_6() + test1_7();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1p.C
new file mode 100644
index 0000000..e4c0ab1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv1p.C
@@ -0,0 +1,145 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 1 at a time
+
+one sink_1_1( A&);
+
+int test1_1()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_1(a)) == 1 * sizeof(long)> t1;
+ return 0;
+}
+
+two sink_1_2(const A&);
+
+int test1_2()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_2(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_1_2(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_1_2(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_1_2(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+three sink_1_3(volatile A&);
+
+int test1_3()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_3(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_1_3(va)) == 3 * sizeof(long)> t3;
+ return 0;
+}
+
+four sink_1_4(const volatile A&);
+
+int test1_4()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_4(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_1_4(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_1_4(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_1_4(cva)) == 4 * sizeof(long)> t4;
+ return 0;
+}
+
+five sink_1_5( A&&);
+
+int test1_5()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_5(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+six sink_1_6(const A&&);
+
+int test1_6()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_6(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_1_6(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+seven sink_1_7(volatile A&&);
+
+int test1_7()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_7(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_1_7(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+eight sink_1_8(const volatile A&&);
+
+int test1_8()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_1_8(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_1_8(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_1_8(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_1_8(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test1_1() + test1_2() + test1_3() + test1_4() +
+ test1_5() + test1_6() + test1_7() + test1_8();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2n.C
new file mode 100644
index 0000000..289cffb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2n.C
@@ -0,0 +1,544 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 2 at a time
+
+one sink_2_12( A&); // { dg-message "note|argument" }
+two sink_2_12(const A&); // { dg-message "note|argument" }
+
+int test2_12()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_12(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 42 }
+ sink_2_12(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 44 }
+ sink_2_12(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 46 }
+ sink_2_12(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 48 }
+ return 0;
+}
+
+one sink_2_13( A&); // { dg-message "note|argument" }
+three sink_2_13(volatile A&); // { dg-message "note|argument" }
+
+int test2_13()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_13(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 62 }
+ sink_2_13(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 64 }
+ sink_2_13(source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
+ sink_2_13(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 68 }
+ sink_2_13(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 70 }
+ sink_2_13(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 72 }
+ return 0;
+}
+
+one sink_2_14( A&); // { dg-message "note|argument" }
+four sink_2_14(const volatile A&); // { dg-message "note|argument" }
+
+int test2_14()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_14(source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 86 }
+ sink_2_14(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 88 }
+ sink_2_14(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 90 }
+ sink_2_14(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 92 }
+ return 0;
+}
+
+one sink_2_15( A&); // { dg-message "note|argument" }
+five sink_2_15( A&&); // { dg-message "note|argument" }
+
+int test2_15()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_15(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 106 }
+ sink_2_15(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 108 }
+ sink_2_15(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 110 }
+ sink_2_15(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 112 }
+ sink_2_15(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 114 }
+ sink_2_15(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 116 }
+ return 0;
+}
+
+one sink_2_16( A&); // { dg-message "note|argument" }
+six sink_2_16(const A&&); // { dg-message "note|argument" }
+
+int test2_16()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_16(ca); // { dg-error "lvalue" }
+ sink_2_16(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 131 }
+ sink_2_16(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 133 }
+ sink_2_16(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 135 }
+ sink_2_16(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 137 }
+ return 0;
+}
+
+one sink_2_17( A&); // { dg-message "note|argument" }
+seven sink_2_17(volatile A&&); // { dg-message "note|argument" }
+
+int test2_17()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_17(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 151 }
+ sink_2_17(va); // { dg-error "lvalue" }
+ sink_2_17(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 154 }
+ sink_2_17(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 156 }
+ sink_2_17(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 158 }
+ return 0;
+}
+
+one sink_2_18( A&);
+eight sink_2_18(const volatile A&&); // { dg-message "argument" }
+
+int test2_18()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_18(ca); // { dg-error "lvalue" }
+ sink_2_18(va); // { dg-error "lvalue" }
+ sink_2_18(cva); // { dg-error "lvalue" }
+}
+
+two sink_2_23(const A&); // { dg-message "note|argument" }
+three sink_2_23(volatile A&); // { dg-message "note|argument" }
+
+int test2_23()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_23(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 186 }
+ sink_2_23(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 188 }
+ sink_2_23(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 190 }
+ sink_2_23(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 192 }
+ return 0;
+}
+
+two sink_2_24(const A&); // { dg-message "note|argument" }
+four sink_2_24(const volatile A&); // { dg-message "note|argument" }
+
+int test2_24()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_24(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 206 }
+ sink_2_24(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 208 }
+ return 0;
+}
+
+three sink_2_34(volatile A&); // { dg-message "three sink_2_34|no known conversion" }
+four sink_2_34(const volatile A&); // { dg-message "note|argument" }
+
+int test2_34()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_34(source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 222 }
+ sink_2_34(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 224 }
+ sink_2_34(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 226 }
+ sink_2_34(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 228 }
+ return 0;
+}
+
+two sink_2_25(const A&); // { dg-message "two sink_2_25|no known conversion" }
+five sink_2_25( A&&); // { dg-message "note|argument" }
+
+int test2_25()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_25(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 242 }
+ sink_2_25(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 244 }
+ sink_2_25(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 246 }
+ sink_2_25(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 248 }
+ return 0;
+}
+
+two sink_2_26(const A&); // { dg-message "two sink_2_26|no known conversion" }
+six sink_2_26(const A&&); // { dg-message "note|argument" }
+
+int test2_26()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_26(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 262 }
+ sink_2_26(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 264 }
+ sink_2_26(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 266 }
+ sink_2_26(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 268 }
+ return 0;
+}
+
+two sink_2_27(const A&); // { dg-message "two sink_2_27|no known conversion" }
+seven sink_2_27(volatile A&&); // { dg-message "note|argument" }
+
+int test2_27()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_27(va); // { dg-error "lvalue" }
+ sink_2_27(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 283 }
+ sink_2_27(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 285 }
+ return 0;
+}
+
+two sink_2_28(const A&);
+eight sink_2_28(const volatile A&&); // { dg-message "argument" }
+
+int test2_28()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_28(va); // { dg-error "lvalue" }
+ sink_2_28(cva); // { dg-error "lvalue" }
+}
+
+three sink_2_35(volatile A&); // { dg-message "three sink_2_35|no known conversion" }
+five sink_2_35( A&&); // { dg-message "note|argument" }
+
+int test2_35()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_35(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 312 }
+ sink_2_35(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 314 }
+ sink_2_35(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 316 }
+ sink_2_35(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 318 }
+ sink_2_35(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 320 }
+ return 0;
+}
+
+three sink_2_36(volatile A&); // { dg-message "three sink_2_36|no known conversion" }
+six sink_2_36(const A&&); // { dg-message "note|argument" }
+
+int test2_36()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_36(ca); // { dg-error "lvalue" }
+ sink_2_36(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 335 }
+ sink_2_36(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 337 }
+ sink_2_36(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 339 }
+ return 0;
+}
+
+three sink_2_37(volatile A&); // { dg-message "three sink_2_37|no known conversion" }
+seven sink_2_37(volatile A&&); // { dg-message "note|argument" }
+
+int test2_37()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_37(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 353 }
+ sink_2_37(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 355 }
+ sink_2_37(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 357 }
+ sink_2_37(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 359 }
+ return 0;
+}
+
+three sink_2_38(volatile A&);
+eight sink_2_38(const volatile A&&); // { dg-message "argument" }
+
+int test2_38()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_38(ca); // { dg-error "lvalue" }
+ sink_2_38(cva); // { dg-error "lvalue" }
+}
+
+four sink_2_45(const volatile A&); // { dg-message "note" }
+five sink_2_45( A&&); // { dg-message "note|argument" }
+
+int test2_45()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_45(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 386 }
+ sink_2_45(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 388 }
+ sink_2_45(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 390 }
+ return 0;
+}
+
+four sink_2_46(const volatile A&); // { dg-message "note" }
+six sink_2_46(const A&&); // { dg-message "note|argument" }
+
+int test2_46()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_46(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 404 }
+ sink_2_46(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 406 }
+ return 0;
+}
+
+four sink_2_47(const volatile A&); // { dg-message "note" }
+seven sink_2_47(volatile A&&); // { dg-message "note|argument" }
+
+int test2_47()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_47(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 420 }
+ sink_2_47(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 422 }
+ return 0;
+}
+
+five sink_2_56( A&&); // { dg-message "note|argument" }
+six sink_2_56(const A&&); // { dg-message "note|argument" }
+
+int test2_56()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_56(a); // { dg-error "lvalue" }
+ sink_2_56(ca); // { dg-error "lvalue" }
+ sink_2_56(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 438 }
+ sink_2_56(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 440 }
+ sink_2_56(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 442 }
+ sink_2_56(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 444 }
+ return 0;
+}
+
+five sink_2_57( A&&); // { dg-message "note|argument" }
+seven sink_2_57(volatile A&&); // { dg-message "note|argument" }
+
+int test2_57()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_57(a); // { dg-error "lvalue" }
+ sink_2_57(va); // { dg-error "lvalue" }
+ sink_2_57(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 460 }
+ sink_2_57(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 462 }
+ sink_2_57(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 464 }
+ sink_2_57(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 466 }
+ return 0;
+}
+
+five sink_2_58( A&&); // { dg-message "argument" }
+eight sink_2_58(const volatile A&&); // { dg-message "argument" }
+
+int test2_58()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_58(a); // { dg-error "lvalue" }
+ sink_2_58(ca); // { dg-error "lvalue" }
+ sink_2_58(va); // { dg-error "lvalue" }
+ sink_2_58(cva); // { dg-error "lvalue" }
+}
+
+six sink_2_67(const A&&); // { dg-message "note|argument" }
+seven sink_2_67(volatile A&&); // { dg-message "note|argument" }
+
+int test2_67()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_67(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 495 }
+ sink_2_67(ca); // { dg-error "lvalue" }
+ sink_2_67(va); // { dg-error "lvalue" }
+ sink_2_67(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 499 }
+ sink_2_67(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 501 }
+ sink_2_67(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 503 }
+ return 0;
+}
+
+six sink_2_68(const A&&); // { dg-message "argument" }
+eight sink_2_68(const volatile A&&); // { dg-message "argument" }
+
+int test2_68()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_68(a); // { dg-error "lvalue" }
+ sink_2_68(ca); // { dg-error "lvalue" }
+ sink_2_68(va); // { dg-error "lvalue" }
+ sink_2_68(cva); // { dg-error "lvalue" }
+}
+
+seven sink_2_78(volatile A&&); // { dg-message "argument" }
+eight sink_2_78(const volatile A&&); // { dg-message "argument" }
+
+int test2_78()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_2_78(a); // { dg-error "lvalue" }
+ sink_2_78(ca); // { dg-error "lvalue" }
+ sink_2_78(va); // { dg-error "lvalue" }
+ sink_2_78(cva); // { dg-error "lvalue" }
+}
+
+int main()
+{
+ return test2_12() + test2_13() + test2_15() + test2_16() +
+ test2_17() + test2_23() + test2_25() + test2_26() +
+ test2_27() + test2_35() + test2_36() + test2_37() +
+ test2_56() + test2_57() + test2_67();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2p.C
new file mode 100644
index 0000000..fb3019f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv2p.C
@@ -0,0 +1,507 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 2 at a time
+
+one sink_2_12( A&);
+two sink_2_12(const A&);
+
+int test2_12()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_12(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_12(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_12(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_2_12(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_2_13( A&);
+three sink_2_13(volatile A&);
+
+int test2_13()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_13(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_13(va)) == 3 * sizeof(long)> t3;
+ return 0;
+}
+
+one sink_2_14( A&);
+four sink_2_14(const volatile A&);
+
+int test2_14()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_14(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_14(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_2_14(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_2_14(cva)) == 4 * sizeof(long)> t4;
+ return 0;
+}
+
+one sink_2_15( A&);
+five sink_2_15( A&&);
+
+int test2_15()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_15(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_15(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+one sink_2_16( A&);
+six sink_2_16(const A&&);
+
+int test2_16()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_16(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_16(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_2_16(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_2_17( A&);
+seven sink_2_17(volatile A&&);
+
+int test2_17()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_17(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_17(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_2_17(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_2_18( A&);
+eight sink_2_18(const volatile A&&);
+
+int test2_18()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_18(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_2_18(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_2_18(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_2_18(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_2_18(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_2_23(const A&);
+three sink_2_23(volatile A&);
+
+int test2_23()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_23(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_23(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_2_23(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_2_23(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_2_24(const A&);
+four sink_2_24(const volatile A&);
+
+int test2_24()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_24(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_2_24(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_24(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_2_24(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_2_24(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_2_24(c_source())) == 2 * sizeof(long)> t6;
+// sa<sizeof(sink_2_24(v_source())) == 4 * sizeof(long)> t7;
+// sa<sizeof(sink_2_24(cv_source())) == 4 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_2_25(const A&);
+five sink_2_25( A&&);
+
+int test2_25()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_25(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_2_25(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_25(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_2_25(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_2_26(const A&);
+six sink_2_26(const A&&);
+
+int test2_26()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_26(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_2_26(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_26(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_2_26(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_2_27(const A&);
+seven sink_2_27(volatile A&&);
+
+int test2_27()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_27(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_2_27(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_27(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_2_27(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_2_27(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_2_28(const A&);
+eight sink_2_28(const volatile A&&);
+
+int test2_28()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_28(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_2_28(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_2_28(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_2_28(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_2_28(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_2_28(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_2_34(volatile A&);
+four sink_2_34(const volatile A&);
+
+int test2_34()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_34(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_2_34(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_2_34(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_2_34(cva)) == 4 * sizeof(long)> t4;
+// sa<sizeof(sink_2_34(source())) == 4 * sizeof(long)> t5;
+// sa<sizeof(sink_2_34(c_source())) == 4 * sizeof(long)> t6;
+// sa<sizeof(sink_2_34(v_source())) == 4 * sizeof(long)> t7;
+// sa<sizeof(sink_2_34(cv_source())) == 4 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_2_35(volatile A&);
+five sink_2_35( A&&);
+
+int test2_35()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_35(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_2_35(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_2_35(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+three sink_2_36(volatile A&);
+six sink_2_36(const A&&);
+
+int test2_36()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_36(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_2_36(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_2_36(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_2_36(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+three sink_2_37(volatile A&);
+seven sink_2_37(volatile A&&);
+
+int test2_37()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_37(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_2_37(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_2_37(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_2_37(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_2_38(volatile A&);
+eight sink_2_38(const volatile A&&);
+
+int test2_38()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_38(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_2_38(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_2_38(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_2_38(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_2_38(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_2_38(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_2_45(const volatile A&);
+five sink_2_45( A&&);
+
+int test2_45()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_45(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_2_45(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_2_45(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_2_45(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_2_45(source())) == 5 * sizeof(long)> t5;
+// sa<sizeof(sink_2_45(c_source())) == 4 * sizeof(long)> t6;
+// sa<sizeof(sink_2_45(v_source())) == 4 * sizeof(long)> t7;
+// sa<sizeof(sink_2_45(cv_source())) == 4 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_2_46(const volatile A&);
+six sink_2_46(const A&&);
+
+int test2_46()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_46(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_2_46(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_2_46(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_2_46(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_2_46(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_2_46(c_source())) == 6 * sizeof(long)> t6;
+// sa<sizeof(sink_2_46(v_source())) == 4 * sizeof(long)> t7;
+// sa<sizeof(sink_2_46(cv_source())) == 4 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_2_47(const volatile A&);
+seven sink_2_47(volatile A&&);
+
+int test2_47()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_47(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_2_47(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_2_47(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_2_47(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_2_47(source())) == 7 * sizeof(long)> t5;
+// sa<sizeof(sink_2_47(c_source())) == 4 * sizeof(long)> t6;
+ sa<sizeof(sink_2_47(v_source())) == 7 * sizeof(long)> t7;
+// sa<sizeof(sink_2_47(cv_source())) == 4 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_2_48(const volatile A&);
+eight sink_2_48(const volatile A&&);
+
+int test2_48()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_48(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_2_48(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_2_48(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_2_48(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_2_48(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_2_48(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_2_48(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_2_48(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+five sink_2_56( A&&);
+six sink_2_56(const A&&);
+
+int test2_56()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_56(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_2_56(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+five sink_2_57( A&&);
+seven sink_2_57(volatile A&&);
+
+int test2_57()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_57(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_2_57(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+five sink_2_58( A&&);
+eight sink_2_58(const volatile A&&);
+
+int test2_58()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_58(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_2_58(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_2_58(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_2_58(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+six sink_2_67(const A&&);
+seven sink_2_67(volatile A&&);
+
+int test2_67()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_67(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_2_67(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+six sink_2_68(const A&&);
+eight sink_2_68(const volatile A&&);
+
+int test2_68()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_68(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_2_68(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_2_68(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_2_68(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+seven sink_2_78(volatile A&&);
+eight sink_2_78(const volatile A&&);
+
+int test2_78()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_2_78(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_2_78(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_2_78(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_2_78(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test2_12() + test2_13() + test2_14() + test2_15() +
+ test2_16() + test2_17() + test2_18() + test2_23() +
+ test2_24() + test2_25() + test2_26() + test2_27() +
+ test2_28() + test2_34() + test2_35() + test2_36() +
+ test2_37() + test2_38() + test2_45() + test2_46() +
+ test2_47() + test2_48() + test2_56() + test2_57() +
+ test2_58() + test2_67() + test2_68() + test2_78();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3n.C
new file mode 100644
index 0000000..765dfbc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3n.C
@@ -0,0 +1,951 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 3 at a time
+
+one sink_3_123( A&); // { dg-message "one sink_3_123|no known conversion" }
+two sink_3_123(const A&); // { dg-message "two sink_3_123|no known conversion" }
+three sink_3_123(volatile A&); // { dg-message "three sink_3_123|no known conversion" }
+
+int test3_123()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_123(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 43 }
+ sink_3_123(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 45 }
+ sink_3_123(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 47 }
+ return 0;
+}
+
+one sink_3_125( A&); // { dg-message "one sink_3_125|no known conversion" }
+two sink_3_125(const A&); // { dg-message "two sink_3_125|no known conversion" }
+five sink_3_125( A&&); // { dg-message "five sink_3_125|no known conversion" }
+
+one sink_3_124( A&); // { dg-message "one sink_3_124|no known conversion" }
+two sink_3_124(const A&); // { dg-message "two sink_3_124|no known conversion" }
+four sink_3_124(const volatile A&); // { dg-message "four sink_3_124|no known conversion" }
+
+int test3_124()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_124(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
+ sink_3_124(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 68 }
+ return 0;
+}
+
+int test3_125()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_125(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 79 }
+ sink_3_125(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 81 }
+ sink_3_125(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 83 }
+ sink_3_125(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 85 }
+ return 0;
+}
+
+one sink_3_126( A&); // { dg-message "one sink_3_126|no known conversion" }
+two sink_3_126(const A&); // { dg-message "two sink_3_126|no known conversion" }
+six sink_3_126(const A&&); // { dg-message "six sink_3_126|no known conversion" }
+
+int test3_126()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_126(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 100 }
+ sink_3_126(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 102 }
+ sink_3_126(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 104 }
+ sink_3_126(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 106 }
+ return 0;
+}
+
+one sink_3_127( A&); // { dg-message "one sink_3_127|no known conversion" }
+two sink_3_127(const A&); // { dg-message "two sink_3_127|no known conversion" }
+seven sink_3_127(volatile A&&); // { dg-message "seven sink_3_127|no known conversion" }
+
+int test3_127()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_127(va); // { dg-error "lvalue" }
+ sink_3_127(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 122 }
+ sink_3_127(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 124 }
+ return 0;
+}
+
+one sink_3_128( A&);
+two sink_3_128(const A&);
+eight sink_3_128(const volatile A&&); // { dg-message "" }
+
+int test3_128()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+
+ sink_3_128(va); // { dg-error "lvalue" }
+ sink_3_128(cva); // { dg-error "lvalue" }
+}
+
+one sink_3_134( A&); // { dg-message "one sink_3_134|no known conversion" }
+three sink_3_134(volatile A&); // { dg-message "three sink_3_134|no known conversion" }
+four sink_3_134(const volatile A&); // { dg-message "four sink_3_134|no known conversion" }
+
+int test3_134()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_134(source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 154 }
+ sink_3_134(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 156 }
+ sink_3_134(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 158 }
+ sink_3_134(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 160 }
+ return 0;
+}
+
+one sink_3_135( A&); // { dg-message "one sink_3_135|no known conversion" }
+three sink_3_135(volatile A&); // { dg-message "three sink_3_135|no known conversion" }
+five sink_3_135( A&&); // { dg-message "five sink_3_135|no known conversion" }
+
+int test3_135()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_135(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 175 }
+ sink_3_135(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 177 }
+ sink_3_135(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 179 }
+ sink_3_135(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 181 }
+ sink_3_135(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 183 }
+ return 0;
+}
+
+one sink_3_136( A&); // { dg-message "one sink_3_136|no known conversion" }
+three sink_3_136(volatile A&); // { dg-message "note" }
+six sink_3_136(const A&&); // { dg-message "" }
+
+int test3_136()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_136(ca); // { dg-error "lvalue" }
+ sink_3_136(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 199 }
+ sink_3_136(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 201 }
+ sink_3_136(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 203 }
+ return 0;
+}
+
+one sink_3_137( A&); // { dg-message "one sink_3_137|no known conversion" }
+three sink_3_137(volatile A&); // { dg-message "note" }
+seven sink_3_137(volatile A&&); // { dg-message "note" }
+
+int test3_137()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_137(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 218 }
+ sink_3_137(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 220 }
+ sink_3_137(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 222 }
+ sink_3_137(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 224 }
+ return 0;
+}
+
+one sink_3_138( A&);
+three sink_3_138(volatile A&);
+eight sink_3_138(const volatile A&&); // { dg-message "" }
+
+int test3_138()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_138(ca); // { dg-error "lvalue" }
+ sink_3_138(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_3_145( A&); // { dg-message "one sink_3_145|no known conversion" }
+four sink_3_145(const volatile A&); // { dg-message "note" }
+five sink_3_145( A&&); // { dg-message "note" }
+
+int test3_145()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_145(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 254 }
+ sink_3_145(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 256 }
+ sink_3_145(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 258 }
+ return 0;
+}
+
+one sink_3_146( A&); // { dg-message "one sink_3_146|no known conversion" }
+four sink_3_146(const volatile A&); // { dg-message "note" }
+six sink_3_146(const A&&); // { dg-message "note" }
+
+int test3_146()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_146(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 273 }
+ sink_3_146(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 275 }
+ return 0;
+}
+
+one sink_3_147( A&); // { dg-message "one sink_3_147|no known conversion" }
+four sink_3_147(const volatile A&); // { dg-message "note" }
+seven sink_3_147(volatile A&&); // { dg-message "note" }
+
+int test3_147()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_147(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 290 }
+ sink_3_147(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 292 }
+ return 0;
+}
+
+one sink_3_156( A&); // { dg-message "one sink_3_156|no known conversion" }
+five sink_3_156( A&&); // { dg-message "note" }
+six sink_3_156(const A&&); // { dg-message "" }
+
+int test3_156()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_156(ca); // { dg-error "lvalue" }
+ sink_3_156(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 308 }
+ sink_3_156(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 310 }
+ sink_3_156(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 312 }
+ sink_3_156(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 314 }
+ return 0;
+}
+
+one sink_3_157( A&); // { dg-message "one sink_3_157|no known conversion" }
+five sink_3_157( A&&); // { dg-message "note" }
+seven sink_3_157(volatile A&&); // { dg-message "" }
+
+int test3_157()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_157(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 329 }
+ sink_3_157(va); // { dg-error "lvalue" }
+ sink_3_157(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 332 }
+ sink_3_157(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 334 }
+ sink_3_157(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 336 }
+ return 0;
+}
+
+one sink_3_158( A&);
+five sink_3_158( A&&);
+eight sink_3_158(const volatile A&&); // { dg-message "" }
+
+int test3_158()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_158(ca); // { dg-error "lvalue" }
+ sink_3_158(va); // { dg-error "lvalue" }
+ sink_3_158(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_3_167( A&); // { dg-message "one sink_3_167|no known conversion" }
+six sink_3_167(const A&&); // { dg-message "" }
+seven sink_3_167(volatile A&&); // { dg-message "" }
+
+int test3_167()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_167(ca); // { dg-error "lvalue" }
+ sink_3_167(va); // { dg-error "lvalue" }
+ sink_3_167(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 369 }
+ sink_3_167(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 371 }
+ sink_3_167(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 373 }
+ return 0;
+}
+
+one sink_3_168( A&);
+six sink_3_168(const A&&); // { dg-message "" }
+eight sink_3_168(const volatile A&&); // { dg-message "" }
+
+int test3_168()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_168(ca); // { dg-error "lvalue" }
+ sink_3_168(va); // { dg-error "lvalue" }
+ sink_3_168(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_3_178( A&);
+seven sink_3_178(volatile A&&); // { dg-message "" }
+eight sink_3_178(const volatile A&&); // { dg-message "" }
+
+int test3_178()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_178(ca); // { dg-error "lvalue" }
+ sink_3_178(va); // { dg-error "lvalue" }
+ sink_3_178(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_3_234(const A&); // { dg-message "two sink_3_234|no known conversion" }
+three sink_3_234(volatile A&); // { dg-message "note" }
+four sink_3_234(const volatile A&); // { dg-message "note" }
+
+int test3_234()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_234(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 420 }
+ sink_3_234(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 422 }
+ sink_3_234(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 424 }
+ return 0;
+}
+
+two sink_3_235(const A&); // { dg-message "two sink_3_235|no known conversion" }
+three sink_3_235(volatile A&); // { dg-message "note" }
+five sink_3_235( A&&); // { dg-message "note" }
+
+int test3_235()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_235(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 439 }
+ sink_3_235(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 441 }
+ sink_3_235(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 443 }
+ sink_3_235(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 445 }
+ return 0;
+}
+
+two sink_3_236(const A&); // { dg-message "two sink_3_236|no known conversion" }
+three sink_3_236(volatile A&); // { dg-message "note" }
+six sink_3_236(const A&&); // { dg-message "note" }
+
+int test3_236()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_236(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 460 }
+ sink_3_236(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 462 }
+ sink_3_236(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 464 }
+ sink_3_236(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 466 }
+ return 0;
+}
+
+two sink_3_237(const A&); // { dg-message "two sink_3_237|no known conversion" }
+three sink_3_237(volatile A&); // { dg-message "note" }
+seven sink_3_237(volatile A&&); // { dg-message "note" }
+
+int test3_237()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_237(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 481 }
+ sink_3_237(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 483 }
+ sink_3_237(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 485 }
+ return 0;
+}
+
+two sink_3_238(const A&); // { dg-message "two sink_3_238|no known conversion" }
+three sink_3_238(volatile A&); // { dg-message "three sink_3_238|no known conversion" }
+eight sink_3_238(const volatile A&&); // { dg-message "eight sink_3_238|no known conversion" }
+
+int test3_238()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_238(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 500 }
+ sink_3_238(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_3_245(const A&); // { dg-message "two sink_3_245|no known conversion" }
+four sink_3_245(const volatile A&); // { dg-message "four sink_3_245|no known conversion" }
+five sink_3_245( A&&); // { dg-message "five sink_3_245|no known conversion" }
+
+int test3_245()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_245(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 516 }
+ sink_3_245(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 518 }
+ return 0;
+}
+
+two sink_3_246(const A&); // { dg-message "two sink_3_246|no known conversion" }
+four sink_3_246(const volatile A&); // { dg-message "four sink_3_246|no known conversion" }
+six sink_3_246(const A&&); // { dg-message "six sink_3_246|no known conversion" }
+
+int test3_246()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_246(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 533 }
+ sink_3_246(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 535 }
+ return 0;
+}
+
+two sink_3_247(const A&); // { dg-message "two sink_3_247|no known conversion" }
+four sink_3_247(const volatile A&); // { dg-message "four sink_3_247|no known conversion" }
+seven sink_3_247(volatile A&&); // { dg-message "seven sink_3_247|no known conversion" }
+
+int test3_247()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_247(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 550 }
+ return 0;
+}
+
+two sink_3_256(const A&); // { dg-message "two sink_3_256|no known conversion" }
+five sink_3_256( A&&); // { dg-message "five sink_3_256|no known conversion" }
+six sink_3_256(const A&&); // { dg-message "six sink_3_256|no known conversion" }
+
+int test3_256()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_256(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 565 }
+ sink_3_256(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 567 }
+ sink_3_256(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 569 }
+ sink_3_256(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 571 }
+ return 0;
+}
+
+two sink_3_257(const A&); // { dg-message "two sink_3_257|no known conversion" }
+five sink_3_257( A&&); // { dg-message "five sink_3_257|no known conversion" }
+seven sink_3_257(volatile A&&); // { dg-message "seven sink_3_257|no known conversion" }
+
+int test3_257()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_257(va); // { dg-error "lvalue" }
+ sink_3_257(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 587 }
+ sink_3_257(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 589 }
+ return 0;
+}
+
+two sink_3_258(const A&);
+five sink_3_258( A&&);
+eight sink_3_258(const volatile A&&); // { dg-message "" }
+
+int test3_258()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_258(va); // { dg-error "lvalue" }
+ sink_3_258(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_3_267(const A&); // { dg-message "two sink_3_267|no known conversion" }
+six sink_3_267(const A&&); // { dg-message "six sink_3_267|no known conversion" }
+seven sink_3_267(volatile A&&); // { dg-message "seven sink_3_267|no known conversion" }
+
+int test3_267()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_267(va); // { dg-error "lvalue" }
+ sink_3_267(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 620 }
+ sink_3_267(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 622 }
+ sink_3_267(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 624 }
+ return 0;
+}
+
+two sink_3_268(const A&);
+six sink_3_268(const A&&);
+eight sink_3_268(const volatile A&&); // { dg-message "" }
+
+int test3_268()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_268(va); // { dg-error "lvalue" }
+ sink_3_268(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_3_278(const A&);
+seven sink_3_278(volatile A&&); // { dg-message "" }
+eight sink_3_278(const volatile A&&); // { dg-message "" }
+
+int test3_278()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_278(va); // { dg-error "lvalue" }
+ sink_3_278(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+three sink_3_345(volatile A&); // { dg-message "three sink_3_345|no known conversion" }
+four sink_3_345(const volatile A&); // { dg-message "four sink_3_345|no known conversion" }
+five sink_3_345( A&&); // { dg-message "five sink_3_345|no known conversion" }
+
+int test3_345()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_345(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 669 }
+ sink_3_345(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 671 }
+ sink_3_345(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 673 }
+ return 0;
+}
+
+three sink_3_346(volatile A&); // { dg-message "three sink_3_346|no known conversion" }
+four sink_3_346(const volatile A&); // { dg-message "four sink_3_346|no known conversion" }
+six sink_3_346(const A&&); // { dg-message "six sink_3_346|no known conversion" }
+
+int test3_346()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_346(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
+ sink_3_346(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 690 }
+ return 0;
+}
+
+three sink_3_347(volatile A&); // { dg-message "three sink_3_347|no known conversion" }
+four sink_3_347(const volatile A&); // { dg-message "four sink_3_347|no known conversion" }
+seven sink_3_347(volatile A&&); // { dg-message "seven sink_3_347|no known conversion" }
+
+int test3_347()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_347(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 705 }
+ sink_3_347(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 707 }
+ return 0;
+}
+
+three sink_3_356(volatile A&); // { dg-message "three sink_3_356|no known conversion" }
+five sink_3_356( A&&); // { dg-message "five sink_3_356|no known conversion" }
+six sink_3_356(const A&&); // { dg-message "six sink_3_356|no known conversion" }
+
+int test3_356()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_356(ca); // { dg-error "lvalue" }
+ sink_3_356(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 723 }
+ sink_3_356(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
+ sink_3_356(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 727 }
+ return 0;
+}
+
+three sink_3_357(volatile A&); // { dg-message "three sink_3_357|no known conversion" }
+five sink_3_357( A&&); // { dg-message "five sink_3_357|no known conversion" }
+seven sink_3_357(volatile A&&); // { dg-message "seven sink_3_357|no known conversion" }
+
+int test3_357()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_357(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 742 }
+ sink_3_357(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 744 }
+ sink_3_357(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 746 }
+ sink_3_357(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 748 }
+ return 0;
+}
+
+three sink_3_358(volatile A&);
+five sink_3_358( A&&);
+eight sink_3_358(const volatile A&&); // { dg-message "" }
+
+int test3_358()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_358(ca); // { dg-error "lvalue" }
+ sink_3_358(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+three sink_3_367(volatile A&); // { dg-message "three sink_3_367|no known conversion" }
+six sink_3_367(const A&&); // { dg-message "six sink_3_367|no known conversion" }
+seven sink_3_367(volatile A&&); // { dg-message "seven sink_3_367|no known conversion" }
+
+int test3_367()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_367(ca); // { dg-error "lvalue" }
+ sink_3_367(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 779 }
+ sink_3_367(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 781 }
+ sink_3_367(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 783 }
+ return 0;
+}
+
+three sink_3_368(volatile A&);
+six sink_3_368(const A&&); // { dg-message "" }
+eight sink_3_368(const volatile A&&); // { dg-message "" }
+
+int test3_368()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_368(ca); // { dg-error "lvalue" }
+ sink_3_368(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+three sink_3_378(volatile A&);
+seven sink_3_378(volatile A&&);
+eight sink_3_378(const volatile A&&); // { dg-message "" }
+
+int test3_378()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_378(ca); // { dg-error "lvalue" }
+ sink_3_378(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+four sink_3_456(const volatile A&); // { dg-message "note" }
+five sink_3_456( A&&); // { dg-message "note" }
+six sink_3_456(const A&&); // { dg-message "note" }
+
+int test3_456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 828 }
+ sink_3_456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 830 }
+ return 0;
+}
+
+four sink_3_457(const volatile A&); // { dg-message "note" }
+five sink_3_457( A&&); // { dg-message "note" }
+seven sink_3_457(volatile A&&); // { dg-message "note" }
+
+int test3_457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_457(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 845 }
+ sink_3_457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 847 }
+ return 0;
+}
+
+four sink_3_467(const volatile A&); // { dg-message "note" }
+six sink_3_467(const A&&); // { dg-message "note" }
+seven sink_3_467(volatile A&&); // { dg-message "note" }
+
+int test3_467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 862 }
+ sink_3_467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 864 }
+ return 0;
+}
+
+five sink_3_567( A&&); // { dg-message "five sink_3_567|no known conversion" }
+six sink_3_567(const A&&); // { dg-message "six sink_3_567|no known conversion" }
+seven sink_3_567(volatile A&&); // { dg-message "seven sink_3_567|no known conversion" }
+
+int test3_567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_567(a); // { dg-error "lvalue" }
+ sink_3_567(ca); // { dg-error "lvalue" }
+ sink_3_567(va); // { dg-error "lvalue" }
+ sink_3_567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 882 }
+ sink_3_567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 884 }
+ return 0;
+}
+
+five sink_3_568( A&&); // { dg-message "" }
+six sink_3_568(const A&&); // { dg-message "" }
+eight sink_3_568(const volatile A&&); // { dg-message "" }
+
+int test3_568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_568(a); // { dg-error "lvalue" }
+ sink_3_568(ca); // { dg-error "lvalue" }
+ sink_3_568(va); // { dg-error "lvalue" }
+ sink_3_568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+five sink_3_578( A&&); // { dg-message "" }
+seven sink_3_578(volatile A&&); // { dg-message "" }
+eight sink_3_578(const volatile A&&); // { dg-message "" }
+
+int test3_578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_578(a); // { dg-error "lvalue" }
+ sink_3_578(ca); // { dg-error "lvalue" }
+ sink_3_578(va); // { dg-error "lvalue" }
+ sink_3_578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+six sink_3_678(const A&&); // { dg-message "six sink_3_678|no known conversion" }
+seven sink_3_678(volatile A&&); // { dg-message "seven sink_3_678|no known conversion" }
+eight sink_3_678(const volatile A&&); // { dg-message "eight sink_3_678|no known conversion" }
+
+int test3_678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_3_678(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 933 }
+ sink_3_678(ca); // { dg-error "lvalue" }
+ sink_3_678(va); // { dg-error "lvalue" }
+ sink_3_678(cva); // { dg-error "lvalue" }
+ sink_3_678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 938 }
+ return 0;
+}
+
+int main()
+{
+ return test3_123() + test3_125() + test3_126() + test3_127() +
+ test3_135() + test3_136() + test3_137() + test3_156() +
+ test3_157() + test3_167() + test3_234() + test3_235() +
+ test3_236() + test3_237() + test3_238() + test3_256() +
+ test3_257() + test3_267() + test3_356() + test3_357() +
+ test3_367() + test3_467() + test3_567() + test3_678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3p.C
new file mode 100644
index 0000000..6d4625a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv3p.C
@@ -0,0 +1,1070 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 3 at a time
+
+one sink_3_123( A&);
+two sink_3_123(const A&);
+three sink_3_123(volatile A&);
+
+int test3_123()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_123(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_123(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_123(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_123(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_3_123(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_124( A&);
+two sink_3_124(const A&);
+four sink_3_124(const volatile A&);
+
+int test3_124()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_124(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_124(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_124(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_124(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_124(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_3_124(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_125( A&);
+two sink_3_125(const A&);
+five sink_3_125( A&&);
+
+int test3_125()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_125(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_125(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_125(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_125(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_126( A&);
+two sink_3_126(const A&);
+six sink_3_126(const A&&);
+
+int test3_126()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_126(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_126(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_126(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_126(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_127( A&);
+two sink_3_127(const A&);
+seven sink_3_127(volatile A&&);
+
+int test3_127()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_127(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_127(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_127(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_127(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_3_127(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_3_128( A&);
+two sink_3_128(const A&);
+eight sink_3_128(const volatile A&&);
+
+int test3_128()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_128(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_128(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_128(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_3_128(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_128(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_128(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_3_134( A&);
+three sink_3_134(volatile A&);
+four sink_3_134(const volatile A&);
+
+int test3_134()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_134(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_134(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_134(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_134(cva)) == 4 * sizeof(long)> t4;
+ return 0;
+}
+
+one sink_3_135( A&);
+three sink_3_135(volatile A&);
+five sink_3_135( A&&);
+
+int test3_135()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_135(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_135(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_135(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+one sink_3_136( A&);
+three sink_3_136(volatile A&);
+six sink_3_136(const A&&);
+
+int test3_136()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_136(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_136(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_136(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_136(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_137( A&);
+three sink_3_137(volatile A&);
+seven sink_3_137(volatile A&&);
+
+int test3_137()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_137(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_137(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_137(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_137(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_3_138( A&);
+three sink_3_138(volatile A&);
+eight sink_3_138(const volatile A&&);
+
+int test3_138()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_138(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_138(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_138(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_3_138(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_138(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_138(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_3_145( A&);
+four sink_3_145(const volatile A&);
+five sink_3_145( A&&);
+
+int test3_145()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_145(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_145(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_145(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_145(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_145(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+one sink_3_146( A&);
+four sink_3_146(const volatile A&);
+six sink_3_146(const A&&);
+
+int test3_146()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_146(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_146(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_146(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_146(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_146(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_146(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_147( A&);
+four sink_3_147(const volatile A&);
+seven sink_3_147(volatile A&&);
+
+int test3_147()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_147(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_147(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_147(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_147(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_147(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_147(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_3_148( A&);
+four sink_3_148(const volatile A&);
+eight sink_3_148(const volatile A&&);
+
+int test3_148()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_148(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_148(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_148(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_148(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_148(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_3_148(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_148(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_148(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_3_156( A&);
+five sink_3_156( A&&);
+six sink_3_156(const A&&);
+
+int test3_156()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_156(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_156(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_156(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_3_157( A&);
+five sink_3_157( A&&);
+seven sink_3_157(volatile A&&);
+
+int test3_157()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_157(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_157(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_157(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_3_158( A&);
+five sink_3_158( A&&);
+eight sink_3_158(const volatile A&&);
+
+int test3_158()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_158(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_158(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_158(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_158(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_158(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_3_167( A&);
+six sink_3_167(const A&&);
+seven sink_3_167(volatile A&&);
+
+int test3_167()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_167(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_167(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_167(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_3_168( A&);
+six sink_3_168(const A&&);
+eight sink_3_168(const volatile A&&);
+
+int test3_168()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_168(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_168(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_168(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_168(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_168(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_3_178( A&);
+seven sink_3_178(volatile A&&);
+eight sink_3_178(const volatile A&&);
+
+int test3_178()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_178(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_3_178(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_178(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_178(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_3_178(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_3_234(const A&);
+three sink_3_234(volatile A&);
+four sink_3_234(const volatile A&);
+
+int test3_234()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_234(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_234(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_234(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_234(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_3_234(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_3_235(const A&);
+three sink_3_235(volatile A&);
+five sink_3_235( A&&);
+
+int test3_235()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_235(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_235(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_235(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_235(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_3_236(const A&);
+three sink_3_236(volatile A&);
+six sink_3_236(const A&&);
+
+int test3_236()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_236(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_236(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_236(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_236(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_3_237(const A&);
+three sink_3_237(volatile A&);
+seven sink_3_237(volatile A&&);
+
+int test3_237()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_237(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_237(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_237(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_237(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_3_237(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_3_238(const A&);
+three sink_3_238(volatile A&);
+eight sink_3_238(const volatile A&&);
+
+int test3_238()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_238(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_238(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_238(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_3_238(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_238(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_238(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_3_245(const A&);
+four sink_3_245(const volatile A&);
+five sink_3_245( A&&);
+
+int test3_245()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_245(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_245(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_245(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_245(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_245(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_245(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_3_246(const A&);
+four sink_3_246(const volatile A&);
+six sink_3_246(const A&&);
+
+int test3_246()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_246(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_246(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_246(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_246(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_246(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_246(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_3_247(const A&);
+four sink_3_247(const volatile A&);
+seven sink_3_247(volatile A&&);
+
+int test3_247()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_247(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_247(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_247(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_247(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_247(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_247(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_3_247(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_3_248(const A&);
+four sink_3_248(const volatile A&);
+eight sink_3_248(const volatile A&&);
+
+int test3_248()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_248(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_248(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_248(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_248(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_248(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_3_248(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_248(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_248(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_3_256(const A&);
+five sink_3_256( A&&);
+six sink_3_256(const A&&);
+
+int test3_256()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_256(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_256(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_256(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_256(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_3_257(const A&);
+five sink_3_257( A&&);
+seven sink_3_257(volatile A&&);
+
+int test3_257()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_257(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_257(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_257(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_257(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_3_257(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_3_258(const A&);
+five sink_3_258( A&&);
+eight sink_3_258(const volatile A&&);
+
+int test3_258()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_258(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_258(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_258(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_258(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_258(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_258(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_3_267(const A&);
+six sink_3_267(const A&&);
+seven sink_3_267(volatile A&&);
+
+int test3_267()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_267(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_267(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_267(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_267(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_3_268(const A&);
+six sink_3_268(const A&&);
+eight sink_3_268(const volatile A&&);
+
+int test3_268()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_268(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_268(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_268(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_268(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_268(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_268(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_3_278(const A&);
+seven sink_3_278(volatile A&&);
+eight sink_3_278(const volatile A&&);
+
+int test3_278()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_278(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_3_278(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_3_278(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_278(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_278(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_3_278(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_3_345(volatile A&);
+four sink_3_345(const volatile A&);
+five sink_3_345( A&&);
+
+int test3_345()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_345(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_345(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_345(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_345(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_345(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+three sink_3_346(volatile A&);
+four sink_3_346(const volatile A&);
+six sink_3_346(const A&&);
+
+int test3_346()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_346(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_346(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_346(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_346(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_346(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_346(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+three sink_3_347(volatile A&);
+four sink_3_347(const volatile A&);
+seven sink_3_347(volatile A&&);
+
+int test3_347()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_347(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_347(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_347(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_347(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_347(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_347(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_3_348(volatile A&);
+four sink_3_348(const volatile A&);
+eight sink_3_348(const volatile A&&);
+
+int test3_348()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_348(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_348(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_348(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_348(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_348(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_3_348(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_348(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_348(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_3_356(volatile A&);
+five sink_3_356( A&&);
+six sink_3_356(const A&&);
+
+int test3_356()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_356(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_356(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_356(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_356(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+three sink_3_357(volatile A&);
+five sink_3_357( A&&);
+seven sink_3_357(volatile A&&);
+
+int test3_357()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_357(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_357(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_357(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_357(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_3_358(volatile A&);
+five sink_3_358( A&&);
+eight sink_3_358(const volatile A&&);
+
+int test3_358()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_358(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_358(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_358(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_358(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_358(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_358(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_3_367(volatile A&);
+six sink_3_367(const A&&);
+seven sink_3_367(volatile A&&);
+
+int test3_367()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_367(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_367(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_367(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_367(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_3_368(volatile A&);
+six sink_3_368(const A&&);
+eight sink_3_368(const volatile A&&);
+
+int test3_368()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_368(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_368(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_368(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_368(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_368(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_368(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_3_378(volatile A&);
+seven sink_3_378(volatile A&&);
+eight sink_3_378(const volatile A&&);
+
+int test3_378()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_378(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_3_378(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_3_378(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_378(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_378(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_3_378(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_3_456(const volatile A&);
+five sink_3_456( A&&);
+six sink_3_456(const A&&);
+
+int test3_456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_456(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_3_456(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_456(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_456(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_456(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_456(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+four sink_3_457(const volatile A&);
+five sink_3_457( A&&);
+seven sink_3_457(volatile A&&);
+
+int test3_457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_457(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_3_457(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_457(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_457(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_457(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_457(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+four sink_3_458(const volatile A&);
+five sink_3_458( A&&);
+eight sink_3_458(const volatile A&&);
+
+int test3_458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_458(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_3_458(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_458(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_458(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_458(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_458(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_458(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_458(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_3_467(const volatile A&);
+six sink_3_467(const A&&);
+seven sink_3_467(volatile A&&);
+
+int test3_467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_467(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_3_467(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_467(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_467(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_467(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_467(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+four sink_3_468(const volatile A&);
+six sink_3_468(const A&&);
+eight sink_3_468(const volatile A&&);
+
+int test3_468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_468(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_3_468(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_468(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_468(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_468(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_3_468(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_468(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_468(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_3_478(const volatile A&);
+seven sink_3_478(volatile A&&);
+eight sink_3_478(const volatile A&&);
+
+int test3_478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_478(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_3_478(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_3_478(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_3_478(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_3_478(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_3_478(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_478(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_3_478(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+five sink_3_567( A&&);
+six sink_3_567(const A&&);
+seven sink_3_567(volatile A&&);
+
+int test3_567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+five sink_3_568( A&&);
+six sink_3_568(const A&&);
+eight sink_3_568(const volatile A&&);
+
+int test3_568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_3_568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+five sink_3_578( A&&);
+seven sink_3_578(volatile A&&);
+eight sink_3_578(const volatile A&&);
+
+int test3_578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_3_578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_3_578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_3_578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+six sink_3_678(const A&&);
+seven sink_3_678(volatile A&&);
+eight sink_3_678(const volatile A&&);
+
+int test3_678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_3_678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_3_678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_3_678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test3_123() + test3_124() + test3_125() + test3_126() +
+ test3_127() + test3_128() + test3_134() + test3_135() +
+ test3_136() + test3_137() + test3_138() + test3_145() +
+ test3_146() + test3_147() + test3_148() + test3_156() +
+ test3_157() + test3_158() + test3_167() + test3_168() +
+ test3_178() + test3_234() + test3_235() + test3_236() +
+ test3_237() + test3_238() + test3_245() + test3_246() +
+ test3_247() + test3_248() + test3_256() + test3_257() +
+ test3_258() + test3_267() + test3_268() + test3_278() +
+ test3_345() + test3_346() + test3_347() + test3_348() +
+ test3_356() + test3_357() + test3_358() + test3_367() +
+ test3_368() + test3_378() + test3_456() + test3_457() +
+ test3_458() + test3_467() + test3_468() + test3_478() +
+ test3_567() + test3_568() + test3_578() + test3_678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4n.C
new file mode 100644
index 0000000..dc56afe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4n.C
@@ -0,0 +1,1072 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 4 at a time
+
+one sink_4_1234( A&); // { dg-message "one sink_4_1234|no known conversion" }
+two sink_4_1234(const A&); // { dg-message "note" }
+three sink_4_1234(volatile A&); // { dg-message "note" }
+four sink_4_1234(const volatile A&); // { dg-message "note" }
+
+int test4_1234()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1234(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 44 }
+ sink_4_1234(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 46 }
+ return 0;
+}
+
+one sink_4_1235( A&); // { dg-message "one sink_4_1235|no known conversion" }
+two sink_4_1235(const A&); // { dg-message "note" }
+three sink_4_1235(volatile A&); // { dg-message "note" }
+five sink_4_1235( A&&); // { dg-message "note" }
+
+int test4_1235()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1235(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 62 }
+ sink_4_1235(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 64 }
+ sink_4_1235(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
+ return 0;
+}
+
+one sink_4_1236( A&); // { dg-message "one sink_4_1236|no known conversion" }
+two sink_4_1236(const A&); // { dg-message "note" }
+three sink_4_1236(volatile A&); // { dg-message "note" }
+six sink_4_1236(const A&&); // { dg-message "note" }
+
+int test4_1236()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1236(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 82 }
+ sink_4_1236(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 84 }
+ sink_4_1236(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 86 }
+ return 0;
+}
+
+one sink_4_1237( A&); // { dg-message "one sink_4_1237|no known conversion" }
+two sink_4_1237(const A&); // { dg-message "note" }
+three sink_4_1237(volatile A&); // { dg-message "note" }
+seven sink_4_1237(volatile A&&); // { dg-message "note" }
+
+int test4_1237()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1237(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 102 }
+ sink_4_1237(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 104 }
+ return 0;
+}
+
+one sink_4_1238( A&);
+two sink_4_1238(const A&);
+three sink_4_1238(volatile A&);
+eight sink_4_1238(const volatile A&&); // { dg-message "" }
+
+int test4_1238()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1238(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1245( A&); // { dg-message "one sink_4_1245|no known conversion" }
+two sink_4_1245(const A&); // { dg-message "note" }
+four sink_4_1245(const volatile A&); // { dg-message "note" }
+five sink_4_1245( A&&); // { dg-message "note" }
+
+int test4_1245()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1245(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 135 }
+ sink_4_1245(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 137 }
+ return 0;
+}
+
+one sink_4_1246( A&); // { dg-message "one sink_4_1246|no known conversion" }
+two sink_4_1246(const A&); // { dg-message "note" }
+four sink_4_1246(const volatile A&); // { dg-message "note" }
+six sink_4_1246(const A&&); // { dg-message "note" }
+
+int test4_1246()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1246(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 153 }
+ sink_4_1246(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 155 }
+ return 0;
+}
+
+one sink_4_1247( A&); // { dg-message "one sink_4_1247|no known conversion" }
+two sink_4_1247(const A&); // { dg-message "note" }
+four sink_4_1247(const volatile A&); // { dg-message "note" }
+seven sink_4_1247(volatile A&&); // { dg-message "note" }
+
+int test4_1247()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1247(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 171 }
+ return 0;
+}
+
+one sink_4_1256( A&); // { dg-message "one sink_4_1256|no known conversion" }
+two sink_4_1256(const A&); // { dg-message "note" }
+five sink_4_1256( A&&); // { dg-message "note" }
+six sink_4_1256(const A&&); // { dg-message "note" }
+
+int test4_1256()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1256(va); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 187 }
+ sink_4_1256(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 189 }
+ sink_4_1256(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 191 }
+ sink_4_1256(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 193 }
+ return 0;
+}
+
+one sink_4_1257( A&); // { dg-message "one sink_4_1257|no known conversion" }
+two sink_4_1257(const A&); // { dg-message "note" }
+five sink_4_1257( A&&); // { dg-message "note" }
+seven sink_4_1257(volatile A&&); // { dg-message "" }
+
+int test4_1257()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1257(va); // { dg-error "lvalue" }
+ sink_4_1257(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 210 }
+ sink_4_1257(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 212 }
+ return 0;
+}
+
+one sink_4_1258( A&);
+two sink_4_1258(const A&);
+five sink_4_1258( A&&);
+eight sink_4_1258(const volatile A&&); // { dg-message "" }
+
+int test4_1258()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1258(va); // { dg-error "lvalue" }
+ sink_4_1258(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1267( A&); // { dg-message "one sink_4_1267|no known conversion" }
+two sink_4_1267(const A&); // { dg-message "note" }
+six sink_4_1267(const A&&); // { dg-message "note" }
+seven sink_4_1267(volatile A&&); // { dg-message "" }
+
+int test4_1267()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1267(va); // { dg-error "lvalue" }
+ sink_4_1267(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 245 }
+ sink_4_1267(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 247 }
+ sink_4_1267(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 249 }
+ return 0;
+}
+
+one sink_4_1268( A&);
+two sink_4_1268(const A&);
+six sink_4_1268(const A&&);
+eight sink_4_1268(const volatile A&&); // { dg-message "" }
+
+int test4_1268()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1268(va); // { dg-error "lvalue" }
+ sink_4_1268(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1278( A&);
+two sink_4_1278(const A&);
+seven sink_4_1278(volatile A&&); // { dg-message "" }
+eight sink_4_1278(const volatile A&&); // { dg-message "" }
+
+int test4_1278()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1278(va); // { dg-error "lvalue" }
+ sink_4_1278(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1345( A&); // { dg-message "one sink_4_1345|no known conversion" }
+three sink_4_1345(volatile A&); // { dg-message "note" }
+four sink_4_1345(const volatile A&); // { dg-message "note" }
+five sink_4_1345( A&&); // { dg-message "note" }
+
+int test4_1345()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1345(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 297 }
+ sink_4_1345(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 299 }
+ sink_4_1345(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 301 }
+ return 0;
+}
+
+one sink_4_1346( A&); // { dg-message "one sink_4_1346|no known conversion" }
+three sink_4_1346(volatile A&); // { dg-message "note" }
+four sink_4_1346(const volatile A&); // { dg-message "note" }
+six sink_4_1346(const A&&); // { dg-message "note" }
+
+int test4_1346()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1346(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 317 }
+ sink_4_1346(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 319 }
+ return 0;
+}
+
+one sink_4_1347( A&); // { dg-message "one sink_4_1347|no known conversion" }
+three sink_4_1347(volatile A&); // { dg-message "note" }
+four sink_4_1347(const volatile A&); // { dg-message "note" }
+seven sink_4_1347(volatile A&&); // { dg-message "note" }
+
+int test4_1347()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1347(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 335 }
+ sink_4_1347(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 337 }
+ return 0;
+}
+
+one sink_4_1356( A&); // { dg-message "one sink_4_1356|no known conversion" }
+three sink_4_1356(volatile A&); // { dg-message "note" }
+five sink_4_1356( A&&); // { dg-message "note" }
+six sink_4_1356(const A&&); // { dg-message "" }
+
+int test4_1356()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1356(ca); // { dg-error "lvalue" }
+ sink_4_1356(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 354 }
+ sink_4_1356(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 356 }
+ sink_4_1356(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 358 }
+ return 0;
+}
+
+one sink_4_1357( A&); // { dg-message "one sink_4_1357|no known conversion" }
+three sink_4_1357(volatile A&); // { dg-message "note" }
+five sink_4_1357( A&&); // { dg-message "note" }
+seven sink_4_1357(volatile A&&); // { dg-message "note" }
+
+int test4_1357()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1357(ca); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 374 }
+ sink_4_1357(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 376 }
+ sink_4_1357(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 378 }
+ sink_4_1357(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 380 }
+ return 0;
+}
+
+one sink_4_1358( A&);
+three sink_4_1358(volatile A&);
+five sink_4_1358( A&&);
+eight sink_4_1358(const volatile A&&); // { dg-message "" }
+
+int test4_1358()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1358(ca); // { dg-error "lvalue" }
+ sink_4_1358(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1367( A&); // { dg-message "one sink_4_1367|no known conversion" }
+three sink_4_1367(volatile A&); // { dg-message "note" }
+six sink_4_1367(const A&&); // { dg-message "" }
+seven sink_4_1367(volatile A&&); // { dg-message "note" }
+
+int test4_1367()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1367(ca); // { dg-error "lvalue" }
+ sink_4_1367(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 413 }
+ sink_4_1367(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 415 }
+ sink_4_1367(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 417 }
+ return 0;
+}
+
+one sink_4_1368( A&);
+three sink_4_1368(volatile A&);
+six sink_4_1368(const A&&); // { dg-message "" }
+eight sink_4_1368(const volatile A&&); // { dg-message "" }
+
+int test4_1368()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1368(ca); // { dg-error "lvalue" }
+ sink_4_1368(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1378( A&);
+three sink_4_1378(volatile A&);
+seven sink_4_1378(volatile A&&);
+eight sink_4_1378(const volatile A&&); // { dg-message "" }
+
+int test4_1378()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1378(ca); // { dg-error "lvalue" }
+ sink_4_1378(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1456( A&); // { dg-message "one sink_4_1456|no known conversion" }
+four sink_4_1456(const volatile A&); // { dg-message "note" }
+five sink_4_1456( A&&); // { dg-message "note" }
+six sink_4_1456(const A&&); // { dg-message "note" }
+
+int test4_1456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 465 }
+ sink_4_1456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 467 }
+ return 0;
+}
+
+one sink_4_1457( A&); // { dg-message "one sink_4_1457|no known conversion" }
+four sink_4_1457(const volatile A&); // { dg-message "note" }
+five sink_4_1457( A&&); // { dg-message "note" }
+seven sink_4_1457(volatile A&&); // { dg-message "note" }
+
+int test4_1457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1457(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 483 }
+ sink_4_1457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 485 }
+ return 0;
+}
+
+one sink_4_1467( A&); // { dg-message "one sink_4_1467|no known conversion" }
+four sink_4_1467(const volatile A&); // { dg-message "note" }
+six sink_4_1467(const A&&); // { dg-message "note" }
+seven sink_4_1467(volatile A&&); // { dg-message "note" }
+
+int test4_1467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 501 }
+ sink_4_1467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 503 }
+ return 0;
+}
+
+one sink_4_1567( A&); // { dg-message "one sink_4_1567|no known conversion" }
+five sink_4_1567( A&&); // { dg-message "note" }
+six sink_4_1567(const A&&); // { dg-message "" }
+seven sink_4_1567(volatile A&&); // { dg-message "" }
+
+int test4_1567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1567(ca); // { dg-error "lvalue" }
+ sink_4_1567(va); // { dg-error "lvalue" }
+ sink_4_1567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 521 }
+ sink_4_1567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 523 }
+ return 0;
+}
+
+one sink_4_1568( A&);
+five sink_4_1568( A&&);
+six sink_4_1568(const A&&); // { dg-message "" }
+eight sink_4_1568(const volatile A&&); // { dg-message "" }
+
+int test4_1568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1568(ca); // { dg-error "lvalue" }
+ sink_4_1568(va); // { dg-error "lvalue" }
+ sink_4_1568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1578( A&);
+five sink_4_1578( A&&);
+seven sink_4_1578(volatile A&&); // { dg-message "" }
+eight sink_4_1578(const volatile A&&); // { dg-message "" }
+
+int test4_1578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1578(ca); // { dg-error "lvalue" }
+ sink_4_1578(va); // { dg-error "lvalue" }
+ sink_4_1578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_4_1678( A&);
+six sink_4_1678(const A&&); // { dg-message "" }
+seven sink_4_1678(volatile A&&); // { dg-message "" }
+eight sink_4_1678(const volatile A&&); // { dg-message "" }
+
+int test4_1678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_1678(ca); // { dg-error "lvalue" }
+ sink_4_1678(va); // { dg-error "lvalue" }
+ sink_4_1678(cva); // { dg-error "lvalue" }
+ sink_4_1678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 576 }
+ return 0;
+}
+
+two sink_4_2345(const A&); // { dg-message "two sink_4_2345|no known conversion" }
+three sink_4_2345(volatile A&); // { dg-message "note" }
+four sink_4_2345(const volatile A&); // { dg-message "note" }
+five sink_4_2345( A&&); // { dg-message "note" }
+
+int test4_2345()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2345(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 592 }
+ sink_4_2345(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 594 }
+ sink_4_2345(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 596 }
+ return 0;
+}
+
+two sink_4_2346(const A&); // { dg-message "two sink_4_2346|no known conversion" }
+three sink_4_2346(volatile A&); // { dg-message "note" }
+four sink_4_2346(const volatile A&); // { dg-message "note" }
+six sink_4_2346(const A&&); // { dg-message "note" }
+
+int test4_2346()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2346(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 612 }
+ sink_4_2346(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 614 }
+ sink_4_2346(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 616 }
+ return 0;
+}
+
+two sink_4_2347(const A&); // { dg-message "two sink_4_2347|no known conversion" }
+three sink_4_2347(volatile A&); // { dg-message "note" }
+four sink_4_2347(const volatile A&); // { dg-message "note" }
+seven sink_4_2347(volatile A&&); // { dg-message "note" }
+
+int test4_2347()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2347(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 632 }
+ sink_4_2347(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 634 }
+ return 0;
+}
+
+two sink_4_2348(const A&); // { dg-message "note" }
+three sink_4_2348(volatile A&); // { dg-message "note" }
+four sink_4_2348(const volatile A&); // { dg-message "note" }
+eight sink_4_2348(const volatile A&&); // { dg-message "note" }
+
+int test4_2348()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2348(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 650 }
+ return 0;
+}
+
+two sink_4_2356(const A&); // { dg-message "two sink_4_2356|no known conversion" }
+three sink_4_2356(volatile A&); // { dg-message "note" }
+five sink_4_2356( A&&); // { dg-message "note" }
+six sink_4_2356(const A&&); // { dg-message "note" }
+
+int test4_2356()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2356(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 666 }
+ sink_4_2356(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 668 }
+ sink_4_2356(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 670 }
+ sink_4_2356(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 672 }
+ return 0;
+}
+
+two sink_4_2357(const A&); // { dg-message "two sink_4_2357|no known conversion" }
+three sink_4_2357(volatile A&); // { dg-message "note" }
+five sink_4_2357( A&&); // { dg-message "note" }
+seven sink_4_2357(volatile A&&); // { dg-message "note" }
+
+int test4_2357()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2357(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
+ sink_4_2357(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 690 }
+ sink_4_2357(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 692 }
+ return 0;
+}
+
+two sink_4_2358(const A&); // { dg-message "note" }
+three sink_4_2358(volatile A&); // { dg-message "note" }
+five sink_4_2358( A&&); // { dg-message "note" }
+eight sink_4_2358(const volatile A&&); // { dg-message "" }
+
+int test4_2358()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2358(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 708 }
+ sink_4_2358(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_4_2367(const A&); // { dg-message "two sink_4_2367|no known conversion" }
+three sink_4_2367(volatile A&); // { dg-message "note" }
+six sink_4_2367(const A&&); // { dg-message "note" }
+seven sink_4_2367(volatile A&&); // { dg-message "note" }
+
+int test4_2367()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2367(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
+ sink_4_2367(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 727 }
+ sink_4_2367(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 729 }
+ sink_4_2367(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 731 }
+ return 0;
+}
+
+two sink_4_2368(const A&); // { dg-message "note" }
+three sink_4_2368(volatile A&); // { dg-message "note" }
+six sink_4_2368(const A&&); // { dg-message "note" }
+eight sink_4_2368(const volatile A&&); // { dg-message "" }
+
+int test4_2368()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2368(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 747 }
+ sink_4_2368(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_4_2378(const A&); // { dg-message "note" }
+three sink_4_2378(volatile A&); // { dg-message "note" }
+seven sink_4_2378(volatile A&&); // { dg-message "note" }
+eight sink_4_2378(const volatile A&&); // { dg-message "" }
+
+int test4_2378()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2378(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 764 }
+ sink_4_2378(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_4_2456(const A&); // { dg-message "two sink_4_2456|no known conversion" }
+four sink_4_2456(const volatile A&); // { dg-message "note" }
+five sink_4_2456( A&&); // { dg-message "note" }
+six sink_4_2456(const A&&); // { dg-message "note" }
+
+int test4_2456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 781 }
+ sink_4_2456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 783 }
+ return 0;
+}
+
+two sink_4_2457(const A&); // { dg-message "two sink_4_2457|no known conversion" }
+four sink_4_2457(const volatile A&); // { dg-message "note" }
+five sink_4_2457( A&&); // { dg-message "note" }
+seven sink_4_2457(volatile A&&); // { dg-message "note" }
+
+int test4_2457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 799 }
+ return 0;
+}
+
+two sink_4_2467(const A&); // { dg-message "two sink_4_2467|no known conversion" }
+four sink_4_2467(const volatile A&); // { dg-message "note" }
+six sink_4_2467(const A&&); // { dg-message "note" }
+seven sink_4_2467(volatile A&&); // { dg-message "note" }
+
+int test4_2467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 815 }
+ sink_4_2467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 817 }
+ return 0;
+}
+
+two sink_4_2567(const A&); // { dg-message "two sink_4_2567|no known conversion" }
+five sink_4_2567( A&&); // { dg-message "note" }
+six sink_4_2567(const A&&); // { dg-message "note" }
+seven sink_4_2567(volatile A&&); // { dg-message "" }
+
+int test4_2567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2567(va); // { dg-error "lvalue" }
+ sink_4_2567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 834 }
+ sink_4_2567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 836 }
+ return 0;
+}
+
+two sink_4_2568(const A&);
+five sink_4_2568( A&&);
+six sink_4_2568(const A&&);
+eight sink_4_2568(const volatile A&&); // { dg-message "" }
+
+int test4_2568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2568(va); // { dg-error "lvalue" }
+ sink_4_2568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_4_2578(const A&);
+five sink_4_2578( A&&);
+seven sink_4_2578(volatile A&&); // { dg-message "" }
+eight sink_4_2578(const volatile A&&); // { dg-message "" }
+
+int test4_2578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2578(va); // { dg-error "lvalue" }
+ sink_4_2578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_4_2678(const A&); // { dg-message "note" }
+six sink_4_2678(const A&&); // { dg-message "note" }
+seven sink_4_2678(volatile A&&); // { dg-message "" }
+eight sink_4_2678(const volatile A&&); // { dg-message "" }
+
+int test4_2678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_2678(va); // { dg-error "lvalue" }
+ sink_4_2678(cva); // { dg-error "lvalue" }
+ sink_4_2678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 886 }
+ return 0;
+}
+
+three sink_4_3456(volatile A&); // { dg-message "three sink_4_3456|no known conversion" }
+four sink_4_3456(const volatile A&); // { dg-message "note" }
+five sink_4_3456( A&&); // { dg-message "note" }
+six sink_4_3456(const A&&); // { dg-message "note" }
+
+int test4_3456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 902 }
+ sink_4_3456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 904 }
+ return 0;
+}
+
+three sink_4_3457(volatile A&); // { dg-message "three sink_4_3457|no known conversion" }
+four sink_4_3457(const volatile A&); // { dg-message "note" }
+five sink_4_3457( A&&); // { dg-message "note" }
+seven sink_4_3457(volatile A&&); // { dg-message "note" }
+
+int test4_3457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3457(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 920 }
+ sink_4_3457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 922 }
+ return 0;
+}
+
+three sink_4_3467(volatile A&); // { dg-message "three sink_4_3467|no known conversion" }
+four sink_4_3467(const volatile A&); // { dg-message "note" }
+six sink_4_3467(const A&&); // { dg-message "note" }
+seven sink_4_3467(volatile A&&); // { dg-message "note" }
+
+int test4_3467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 938 }
+ sink_4_3467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 940 }
+ return 0;
+}
+
+three sink_4_3567(volatile A&); // { dg-message "three sink_4_3567|no known conversion" }
+five sink_4_3567( A&&); // { dg-message "note" }
+six sink_4_3567(const A&&); // { dg-message "" }
+seven sink_4_3567(volatile A&&); // { dg-message "note" }
+
+int test4_3567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3567(ca); // { dg-error "lvalue" }
+ sink_4_3567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 957 }
+ sink_4_3567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 959 }
+ return 0;
+}
+
+three sink_4_3568(volatile A&);
+five sink_4_3568( A&&);
+six sink_4_3568(const A&&); // { dg-message "" }
+eight sink_4_3568(const volatile A&&); // { dg-message "" }
+
+int test4_3568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3568(ca); // { dg-error "lvalue" }
+ sink_4_3568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+three sink_4_3578(volatile A&);
+five sink_4_3578( A&&);
+seven sink_4_3578(volatile A&&);
+eight sink_4_3578(const volatile A&&); // { dg-message "" }
+
+int test4_3578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3578(ca); // { dg-error "lvalue" }
+ sink_4_3578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+three sink_4_3678(volatile A&);
+six sink_4_3678(const A&&); // { dg-message "" }
+seven sink_4_3678(volatile A&&); // { dg-message "note" }
+eight sink_4_3678(const volatile A&&); // { dg-message "" }
+
+int test4_3678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_3678(ca); // { dg-error "lvalue" }
+ sink_4_3678(cva); // { dg-error "lvalue" }
+ sink_4_3678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 1009 }
+ return 0;
+}
+
+four sink_4_4567(const volatile A&); // { dg-message "note" }
+five sink_4_4567( A&&); // { dg-message "note" }
+six sink_4_4567(const A&&); // { dg-message "note" }
+seven sink_4_4567(volatile A&&); // { dg-message "note" }
+
+int test4_4567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_4567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 1025 }
+ return 0;
+}
+
+four sink_4_4678(const volatile A&);
+six sink_4_4678(const A&&); // { dg-message "note" }
+seven sink_4_4678(volatile A&&); // { dg-message "note" }
+eight sink_4_4678(const volatile A&&); // { dg-message "note" }
+
+int test4_4678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_4678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 1041 }
+ return 0;
+}
+
+five sink_4_5678( A&&); // { dg-message "" }
+six sink_4_5678(const A&&); // { dg-message "" }
+seven sink_4_5678(volatile A&&); // { dg-message "" }
+eight sink_4_5678(const volatile A&&); // { dg-message "" }
+
+int test4_5678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_4_5678(a); // { dg-error "lvalue" }
+ sink_4_5678(ca); // { dg-error "lvalue" }
+ sink_4_5678(va); // { dg-error "lvalue" }
+ sink_4_5678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+int main()
+{
+ return test4_1235() + test4_1236() + test4_1237() + test4_1256() + test4_1257() +
+ test4_1267() + test4_1356() + test4_1357() + test4_1467() + test4_1567() +
+ test4_1678() + test4_2345() + test4_2346() + test4_2347() + test4_2348() +
+ test4_2356() + test4_2357() + test4_2358() + test4_2367() + test4_2368() +
+ test4_2378() + test4_2467() + test4_2567() + test4_2678() + test4_3467() +
+ test4_3567() + test4_3678() + test4_4678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4p.C
new file mode 100644
index 0000000..8d720c7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv4p.C
@@ -0,0 +1,1448 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 4 at a time
+
+one sink_4_1234( A&);
+two sink_4_1234(const A&);
+three sink_4_1234(volatile A&);
+four sink_4_1234(const volatile A&);
+
+int test4_1234()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1234(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1234(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1234(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1234(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1234(source())) == 2 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1234(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1235( A&);
+two sink_4_1235(const A&);
+three sink_4_1235(volatile A&);
+five sink_4_1235( A&&);
+
+int test4_1235()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1235(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1235(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1235(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1235(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1235(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1236( A&);
+two sink_4_1236(const A&);
+three sink_4_1236(volatile A&);
+six sink_4_1236(const A&&);
+
+int test4_1236()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1236(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1236(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1236(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1236(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1236(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1237( A&);
+two sink_4_1237(const A&);
+three sink_4_1237(volatile A&);
+seven sink_4_1237(volatile A&&);
+
+int test4_1237()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1237(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1237(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1237(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1237(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1237(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1237(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1238( A&);
+two sink_4_1238(const A&);
+three sink_4_1238(volatile A&);
+eight sink_4_1238(const volatile A&&);
+
+int test4_1238()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1238(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1238(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1238(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1238(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1238(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1238(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1238(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1245( A&);
+two sink_4_1245(const A&);
+four sink_4_1245(const volatile A&);
+five sink_4_1245( A&&);
+
+int test4_1245()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1245(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1245(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1245(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1245(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1245(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1245(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1246( A&);
+two sink_4_1246(const A&);
+four sink_4_1246(const volatile A&);
+six sink_4_1246(const A&&);
+
+int test4_1246()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1246(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1246(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1246(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1246(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1246(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1246(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1247( A&);
+two sink_4_1247(const A&);
+four sink_4_1247(const volatile A&);
+seven sink_4_1247(volatile A&&);
+
+int test4_1247()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1247(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1247(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1247(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1247(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1247(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1247(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1247(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1248( A&);
+two sink_4_1248(const A&);
+four sink_4_1248(const volatile A&);
+eight sink_4_1248(const volatile A&&);
+
+int test4_1248()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1248(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1248(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1248(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1248(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1248(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1248(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1248(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1248(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1256( A&);
+two sink_4_1256(const A&);
+five sink_4_1256( A&&);
+six sink_4_1256(const A&&);
+
+int test4_1256()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1256(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1256(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1256(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1256(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1257( A&);
+two sink_4_1257(const A&);
+five sink_4_1257( A&&);
+seven sink_4_1257(volatile A&&);
+
+int test4_1257()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1257(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1257(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1257(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1257(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1257(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1258( A&);
+two sink_4_1258(const A&);
+five sink_4_1258( A&&);
+eight sink_4_1258(const volatile A&&);
+
+int test4_1258()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1258(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1258(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1258(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1258(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1258(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1258(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1267( A&);
+two sink_4_1267(const A&);
+six sink_4_1267(const A&&);
+seven sink_4_1267(volatile A&&);
+
+int test4_1267()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1267(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1267(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1267(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1267(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1268( A&);
+two sink_4_1268(const A&);
+six sink_4_1268(const A&&);
+eight sink_4_1268(const volatile A&&);
+
+int test4_1268()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1268(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1268(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1268(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1268(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1268(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1268(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1278( A&);
+two sink_4_1278(const A&);
+seven sink_4_1278(volatile A&&);
+eight sink_4_1278(const volatile A&&);
+
+int test4_1278()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1278(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1278(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1278(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1278(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1278(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1278(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1345( A&);
+three sink_4_1345(volatile A&);
+four sink_4_1345(const volatile A&);
+five sink_4_1345( A&&);
+
+int test4_1345()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1345(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1345(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1345(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1345(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1345(source())) == 5 * sizeof(long)> t5;
+ return 0;
+}
+
+one sink_4_1346( A&);
+three sink_4_1346(volatile A&);
+four sink_4_1346(const volatile A&);
+six sink_4_1346(const A&&);
+
+int test4_1346()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1346(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1346(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1346(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1346(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1346(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1346(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1347( A&);
+three sink_4_1347(volatile A&);
+four sink_4_1347(const volatile A&);
+seven sink_4_1347(volatile A&&);
+
+int test4_1347()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1347(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1347(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1347(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1347(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1347(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1347(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1348( A&);
+three sink_4_1348(volatile A&);
+four sink_4_1348(const volatile A&);
+eight sink_4_1348(const volatile A&&);
+
+int test4_1348()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1348(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1348(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1348(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1348(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1348(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1348(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1348(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1348(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1356( A&);
+three sink_4_1356(volatile A&);
+five sink_4_1356( A&&);
+six sink_4_1356(const A&&);
+
+int test4_1356()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1356(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1356(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1356(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1356(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1357( A&);
+three sink_4_1357(volatile A&);
+five sink_4_1357( A&&);
+seven sink_4_1357(volatile A&&);
+
+int test4_1357()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1357(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1357(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1357(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1357(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1358( A&);
+three sink_4_1358(volatile A&);
+five sink_4_1358( A&&);
+eight sink_4_1358(const volatile A&&);
+
+int test4_1358()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1358(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1358(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1358(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1358(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1358(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1358(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1367( A&);
+three sink_4_1367(volatile A&);
+six sink_4_1367(const A&&);
+seven sink_4_1367(volatile A&&);
+
+int test4_1367()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1367(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1367(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1367(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1367(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1368( A&);
+three sink_4_1368(volatile A&);
+six sink_4_1368(const A&&);
+eight sink_4_1368(const volatile A&&);
+
+int test4_1368()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1368(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1368(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1368(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1368(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1368(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1368(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1378( A&);
+three sink_4_1378(volatile A&);
+seven sink_4_1378(volatile A&&);
+eight sink_4_1378(const volatile A&&);
+
+int test4_1378()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1378(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1378(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1378(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1378(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1378(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1378(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1456( A&);
+four sink_4_1456(const volatile A&);
+five sink_4_1456( A&&);
+six sink_4_1456(const A&&);
+
+int test4_1456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1456(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1456(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1456(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1456(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1456(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1456(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_4_1457( A&);
+four sink_4_1457(const volatile A&);
+five sink_4_1457( A&&);
+seven sink_4_1457(volatile A&&);
+
+int test4_1457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1457(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1457(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1457(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1457(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1457(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1457(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1458( A&);
+four sink_4_1458(const volatile A&);
+five sink_4_1458( A&&);
+eight sink_4_1458(const volatile A&&);
+
+int test4_1458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1458(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1458(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1458(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1458(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1458(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1458(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1458(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1458(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1467( A&);
+four sink_4_1467(const volatile A&);
+six sink_4_1467(const A&&);
+seven sink_4_1467(volatile A&&);
+
+int test4_1467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1467(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1467(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1467(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1467(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1467(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1467(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1468( A&);
+four sink_4_1468(const volatile A&);
+six sink_4_1468(const A&&);
+eight sink_4_1468(const volatile A&&);
+
+int test4_1468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1468(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1468(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1468(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1468(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1468(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1468(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1468(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1468(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1478( A&);
+four sink_4_1478(const volatile A&);
+seven sink_4_1478(volatile A&&);
+eight sink_4_1478(const volatile A&&);
+
+int test4_1478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1478(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1478(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_1478(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_1478(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_1478(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1478(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1478(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1478(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1567( A&);
+five sink_4_1567( A&&);
+six sink_4_1567(const A&&);
+seven sink_4_1567(volatile A&&);
+
+int test4_1567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1567(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_4_1568( A&);
+five sink_4_1568( A&&);
+six sink_4_1568(const A&&);
+eight sink_4_1568(const volatile A&&);
+
+int test4_1568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1568(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1578( A&);
+five sink_4_1578( A&&);
+seven sink_4_1578(volatile A&&);
+eight sink_4_1578(const volatile A&&);
+
+int test4_1578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1578(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_1578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_4_1678( A&);
+six sink_4_1678(const A&&);
+seven sink_4_1678(volatile A&&);
+eight sink_4_1678(const volatile A&&);
+
+int test4_1678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_1678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_4_1678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_1678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_1678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2345(const A&);
+three sink_4_2345(volatile A&);
+four sink_4_2345(const volatile A&);
+five sink_4_2345( A&&);
+
+int test4_2345()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2345(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2345(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2345(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2345(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2345(c_source())) == 2 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_4_2346(const A&);
+three sink_4_2346(volatile A&);
+four sink_4_2346(const volatile A&);
+six sink_4_2346(const A&&);
+
+int test4_2346()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2346(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2346(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2346(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2346(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2346(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_4_2347(const A&);
+three sink_4_2347(volatile A&);
+four sink_4_2347(const volatile A&);
+seven sink_4_2347(volatile A&&);
+
+int test4_2347()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2347(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2347(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2347(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2347(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2347(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2347(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_4_2348(const A&);
+three sink_4_2348(volatile A&);
+four sink_4_2348(const volatile A&);
+eight sink_4_2348(const volatile A&&);
+
+int test4_2348()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2348(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2348(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2348(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2348(source())) == 8 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2348(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2348(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2348(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2356(const A&);
+three sink_4_2356(volatile A&);
+five sink_4_2356( A&&);
+six sink_4_2356(const A&&);
+
+int test4_2356()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2356(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2356(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2356(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2356(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_4_2357(const A&);
+three sink_4_2357(volatile A&);
+five sink_4_2357( A&&);
+seven sink_4_2357(volatile A&&);
+
+int test4_2357()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2357(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2357(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2357(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2357(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2357(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_4_2358(const A&);
+three sink_4_2358(volatile A&);
+five sink_4_2358( A&&);
+eight sink_4_2358(const volatile A&&);
+
+int test4_2358()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2358(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2358(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2358(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2358(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2358(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2358(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2367(const A&);
+three sink_4_2367(volatile A&);
+six sink_4_2367(const A&&);
+seven sink_4_2367(volatile A&&);
+
+int test4_2367()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2367(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2367(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2367(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2367(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_4_2368(const A&);
+three sink_4_2368(volatile A&);
+six sink_4_2368(const A&&);
+eight sink_4_2368(const volatile A&&);
+
+int test4_2368()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2368(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2368(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2368(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2368(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2368(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2368(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2378(const A&);
+three sink_4_2378(volatile A&);
+seven sink_4_2378(volatile A&&);
+eight sink_4_2378(const volatile A&&);
+
+int test4_2378()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2378(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2378(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2378(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2378(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2378(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2378(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2456(const A&);
+four sink_4_2456(const volatile A&);
+five sink_4_2456( A&&);
+six sink_4_2456(const A&&);
+
+int test4_2456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2456(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2456(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2456(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2456(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2456(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2456(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+two sink_4_2457(const A&);
+four sink_4_2457(const volatile A&);
+five sink_4_2457( A&&);
+seven sink_4_2457(volatile A&&);
+
+int test4_2457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2457(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2457(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2457(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2457(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2457(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2457(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2457(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_4_2458(const A&);
+four sink_4_2458(const volatile A&);
+five sink_4_2458( A&&);
+eight sink_4_2458(const volatile A&&);
+
+int test4_2458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2458(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2458(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2458(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2458(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2458(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2458(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2458(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2458(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2467(const A&);
+four sink_4_2467(const volatile A&);
+six sink_4_2467(const A&&);
+seven sink_4_2467(volatile A&&);
+
+int test4_2467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2467(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2467(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2467(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2467(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2467(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2467(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_4_2468(const A&);
+four sink_4_2468(const volatile A&);
+six sink_4_2468(const A&&);
+eight sink_4_2468(const volatile A&&);
+
+int test4_2468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2468(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2468(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2468(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2468(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2468(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2468(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2468(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2468(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2478(const A&);
+four sink_4_2478(const volatile A&);
+seven sink_4_2478(volatile A&&);
+eight sink_4_2478(const volatile A&&);
+
+int test4_2478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2478(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2478(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2478(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_2478(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_2478(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2478(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2478(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2478(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2567(const A&);
+five sink_4_2567( A&&);
+six sink_4_2567(const A&&);
+seven sink_4_2567(volatile A&&);
+
+int test4_2567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2567(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2567(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_4_2568(const A&);
+five sink_4_2568( A&&);
+six sink_4_2568(const A&&);
+eight sink_4_2568(const volatile A&&);
+
+int test4_2568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2568(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2568(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2578(const A&);
+five sink_4_2578( A&&);
+seven sink_4_2578(volatile A&&);
+eight sink_4_2578(const volatile A&&);
+
+int test4_2578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2578(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2578(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_2578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_4_2678(const A&);
+six sink_4_2678(const A&&);
+seven sink_4_2678(volatile A&&);
+eight sink_4_2678(const volatile A&&);
+
+int test4_2678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_2678(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_4_2678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_4_2678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_2678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_2678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_4_3456(volatile A&);
+four sink_4_3456(const volatile A&);
+five sink_4_3456( A&&);
+six sink_4_3456(const A&&);
+
+int test4_3456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3456(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3456(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_3456(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3456(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_3456(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3456(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+three sink_4_3457(volatile A&);
+four sink_4_3457(const volatile A&);
+five sink_4_3457( A&&);
+seven sink_4_3457(volatile A&&);
+
+int test4_3457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3457(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3457(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_3457(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3457(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_3457(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3457(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_4_3458(volatile A&);
+four sink_4_3458(const volatile A&);
+five sink_4_3458( A&&);
+eight sink_4_3458(const volatile A&&);
+
+int test4_3458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3458(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3458(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_3458(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3458(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_3458(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3458(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3458(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_3458(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_4_3467(volatile A&);
+four sink_4_3467(const volatile A&);
+six sink_4_3467(const A&&);
+seven sink_4_3467(volatile A&&);
+
+int test4_3467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3467(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3467(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_3467(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3467(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_3467(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3467(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_4_3468(volatile A&);
+four sink_4_3468(const volatile A&);
+six sink_4_3468(const A&&);
+eight sink_4_3468(const volatile A&&);
+
+int test4_3468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3468(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3468(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_3468(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3468(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_3468(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3468(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3468(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_3468(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_4_3478(volatile A&);
+four sink_4_3478(const volatile A&);
+seven sink_4_3478(volatile A&&);
+eight sink_4_3478(const volatile A&&);
+
+int test4_3478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3478(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3478(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_3478(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3478(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_3478(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3478(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3478(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_3478(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_4_3567(volatile A&);
+five sink_4_3567( A&&);
+six sink_4_3567(const A&&);
+seven sink_4_3567(volatile A&&);
+
+int test4_3567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3567(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3567(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+three sink_4_3568(volatile A&);
+five sink_4_3568( A&&);
+six sink_4_3568(const A&&);
+eight sink_4_3568(const volatile A&&);
+
+int test4_3568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3568(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3568(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_3568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_4_3578(volatile A&);
+five sink_4_3578( A&&);
+seven sink_4_3578(volatile A&&);
+eight sink_4_3578(const volatile A&&);
+
+int test4_3578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3578(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3578(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_3578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_3578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_4_3678(volatile A&);
+six sink_4_3678(const A&&);
+seven sink_4_3678(volatile A&&);
+eight sink_4_3678(const volatile A&&);
+
+int test4_3678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_3678(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_4_3678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_4_3678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_3678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_3678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_4_4567(const volatile A&);
+five sink_4_4567( A&&);
+six sink_4_4567(const A&&);
+seven sink_4_4567(volatile A&&);
+
+int test4_4567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_4567(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_4_4567(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_4567(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_4567(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_4567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_4567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_4567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+four sink_4_4568(const volatile A&);
+five sink_4_4568( A&&);
+six sink_4_4568(const A&&);
+eight sink_4_4568(const volatile A&&);
+
+int test4_4568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_4568(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_4_4568(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_4568(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_4568(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_4568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_4568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_4568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_4_4568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_4_4578(const volatile A&);
+five sink_4_4578( A&&);
+seven sink_4_4578(volatile A&&);
+eight sink_4_4578(const volatile A&&);
+
+int test4_4578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_4578(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_4_4578(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_4578(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_4578(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_4578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_4578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_4_4578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_4578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_4_4678(const volatile A&);
+six sink_4_4678(const A&&);
+seven sink_4_4678(volatile A&&);
+eight sink_4_4678(const volatile A&&);
+
+int test4_4678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_4678(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_4_4678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_4_4678(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_4_4678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_4_4678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_4678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_4678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+five sink_4_5678( A&&);
+six sink_4_5678(const A&&);
+seven sink_4_5678(volatile A&&);
+eight sink_4_5678(const volatile A&&);
+
+int test4_5678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_4_5678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_4_5678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_4_5678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_4_5678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test4_1234() + test4_1235() + test4_1236() + test4_1237() + test4_1238() +
+ test4_1245() + test4_1246() + test4_1247() + test4_1248() + test4_1256() +
+ test4_1257() + test4_1258() + test4_1267() + test4_1268() + test4_1278() +
+ test4_1345() + test4_1346() + test4_1347() + test4_1348() + test4_1356() +
+ test4_1357() + test4_1358() + test4_1367() + test4_1368() + test4_1378() +
+ test4_1456() + test4_1457() + test4_1458() + test4_1467() + test4_1468() +
+ test4_1478() + test4_1567() + test4_1568() + test4_1578() + test4_1678() +
+ test4_2345() + test4_2346() + test4_2347() + test4_2348() + test4_2356() +
+ test4_2357() + test4_2358() + test4_2367() + test4_2368() + test4_2378() +
+ test4_2456() + test4_2457() + test4_2458() + test4_2467() + test4_2468() +
+ test4_2478() + test4_2567() + test4_2568() + test4_2578() + test4_2678() +
+ test4_3456() + test4_3457() + test4_3458() + test4_3467() + test4_3468() +
+ test4_3478() + test4_3567() + test4_3568() + test4_3578() + test4_3678() +
+ test4_4567() + test4_4568() + test4_4578() + test4_4678() + test4_5678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5n.C
new file mode 100644
index 0000000..ca179cd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5n.C
@@ -0,0 +1,806 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 5 at a time
+
+one sink_5_12345( A&); // { dg-message "one sink_5_12345|no known conversion" }
+two sink_5_12345(const A&); // { dg-message "note" }
+three sink_5_12345(volatile A&); // { dg-message "note" }
+four sink_5_12345(const volatile A&); // { dg-message "note" }
+five sink_5_12345( A&&); // { dg-message "note" }
+
+int test5_12345()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12345(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 45 }
+ sink_5_12345(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 47 }
+ return 0;
+}
+
+one sink_5_12346( A&); // { dg-message "one sink_5_12346|no known conversion" }
+two sink_5_12346(const A&); // { dg-message "note" }
+three sink_5_12346(volatile A&); // { dg-message "note" }
+four sink_5_12346(const volatile A&); // { dg-message "note" }
+six sink_5_12346(const A&&); // { dg-message "note" }
+
+int test5_12346()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12346(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 64 }
+ sink_5_12346(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
+ return 0;
+}
+
+one sink_5_12347( A&); // { dg-message "one sink_5_12347|no known conversion" }
+two sink_5_12347(const A&); // { dg-message "note" }
+three sink_5_12347(volatile A&); // { dg-message "note" }
+four sink_5_12347(const volatile A&); // { dg-message "note" }
+seven sink_5_12347(volatile A&&); // { dg-message "note" }
+
+int test5_12347()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12347(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 83 }
+ return 0;
+}
+
+one sink_5_12356( A&); // { dg-message "one sink_5_12356|no known conversion" }
+two sink_5_12356(const A&); // { dg-message "note" }
+three sink_5_12356(volatile A&); // { dg-message "note" }
+five sink_5_12356( A&&); // { dg-message "note" }
+six sink_5_12356(const A&&); // { dg-message "note" }
+
+int test5_12356()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12356(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 100 }
+ sink_5_12356(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 102 }
+ sink_5_12356(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 104 }
+ return 0;
+}
+
+one sink_5_12357( A&); // { dg-message "one sink_5_12357|no known conversion" }
+two sink_5_12357(const A&); // { dg-message "note" }
+three sink_5_12357(volatile A&); // { dg-message "note" }
+five sink_5_12357( A&&); // { dg-message "note" }
+seven sink_5_12357(volatile A&&); // { dg-message "note" }
+
+int test5_12357()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12357(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 121 }
+ sink_5_12357(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 123 }
+ return 0;
+}
+
+one sink_5_12358( A&);
+two sink_5_12358(const A&);
+three sink_5_12358(volatile A&);
+five sink_5_12358( A&&);
+eight sink_5_12358(const volatile A&&); // { dg-message "" }
+
+int test5_12358()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12358(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_12367( A&); // { dg-message "one sink_5_12367|no known conversion" }
+two sink_5_12367(const A&); // { dg-message "note" }
+three sink_5_12367(volatile A&); // { dg-message "note" }
+six sink_5_12367(const A&&); // { dg-message "note" }
+seven sink_5_12367(volatile A&&); // { dg-message "note" }
+
+int test5_12367()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12367(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 156 }
+ sink_5_12367(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 158 }
+ sink_5_12367(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 160 }
+ return 0;
+}
+
+one sink_5_12368( A&);
+two sink_5_12368(const A&);
+three sink_5_12368(volatile A&);
+six sink_5_12368(const A&&);
+eight sink_5_12368(const volatile A&&); // { dg-message "" }
+
+int test5_12368()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12368(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_12378( A&);
+two sink_5_12378(const A&);
+three sink_5_12378(volatile A&);
+seven sink_5_12378(volatile A&&);
+eight sink_5_12378(const volatile A&&); // { dg-message "" }
+
+int test5_12378()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12378(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_12456( A&); // { dg-message "one sink_5_12456|no known conversion" }
+two sink_5_12456(const A&); // { dg-message "note" }
+four sink_5_12456(const volatile A&); // { dg-message "note" }
+five sink_5_12456( A&&); // { dg-message "note" }
+six sink_5_12456(const A&&); // { dg-message "note" }
+
+int test5_12456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 209 }
+ sink_5_12456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 211 }
+ return 0;
+}
+
+one sink_5_12457( A&); // { dg-message "one sink_5_12457|no known conversion" }
+two sink_5_12457(const A&); // { dg-message "note" }
+four sink_5_12457(const volatile A&); // { dg-message "note" }
+five sink_5_12457( A&&); // { dg-message "note" }
+seven sink_5_12457(volatile A&&); // { dg-message "note" }
+
+int test5_12457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 228 }
+ return 0;
+}
+
+one sink_5_12467( A&); // { dg-message "one sink_5_12467|no known conversion" }
+two sink_5_12467(const A&); // { dg-message "note" }
+four sink_5_12467(const volatile A&); // { dg-message "note" }
+six sink_5_12467(const A&&); // { dg-message "note" }
+seven sink_5_12467(volatile A&&); // { dg-message "note" }
+
+int test5_12467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 245 }
+ sink_5_12467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 247 }
+ return 0;
+}
+
+one sink_5_12567( A&); // { dg-message "one sink_5_12567|no known conversion" }
+two sink_5_12567(const A&); // { dg-message "note" }
+five sink_5_12567( A&&); // { dg-message "note" }
+six sink_5_12567(const A&&); // { dg-message "note" }
+seven sink_5_12567(volatile A&&); // { dg-message "" }
+
+int test5_12567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12567(va); // { dg-error "lvalue" }
+ sink_5_12567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 265 }
+ sink_5_12567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 267 }
+ return 0;
+}
+
+one sink_5_12568( A&);
+two sink_5_12568(const A&);
+five sink_5_12568( A&&);
+six sink_5_12568(const A&&);
+eight sink_5_12568(const volatile A&&); // { dg-message "" }
+
+int test5_12568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12568(va); // { dg-error "lvalue" }
+ sink_5_12568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_12578( A&);
+two sink_5_12578(const A&);
+five sink_5_12578( A&&);
+seven sink_5_12578(volatile A&&); // { dg-message "" }
+eight sink_5_12578(const volatile A&&); // { dg-message "" }
+
+int test5_12578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12578(va); // { dg-error "lvalue" }
+ sink_5_12578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_12678( A&);
+two sink_5_12678(const A&); // { dg-message "note" }
+six sink_5_12678(const A&&); // { dg-message "note" }
+seven sink_5_12678(volatile A&&); // { dg-message "" }
+eight sink_5_12678(const volatile A&&); // { dg-message "" }
+
+int test5_12678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_12678(va); // { dg-error "lvalue" }
+ sink_5_12678(cva); // { dg-error "lvalue" }
+ sink_5_12678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 320 }
+ return 0;
+}
+
+one sink_5_13456( A&); // { dg-message "one sink_5_13456|no known conversion" }
+three sink_5_13456(volatile A&); // { dg-message "note" }
+four sink_5_13456(const volatile A&); // { dg-message "note" }
+five sink_5_13456( A&&); // { dg-message "note" }
+six sink_5_13456(const A&&); // { dg-message "note" }
+
+int test5_13456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 337 }
+ sink_5_13456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 339 }
+ return 0;
+}
+
+one sink_5_13457( A&); // { dg-message "one sink_5_13457|no known conversion" }
+three sink_5_13457(volatile A&); // { dg-message "note" }
+four sink_5_13457(const volatile A&); // { dg-message "note" }
+five sink_5_13457( A&&); // { dg-message "note" }
+seven sink_5_13457(volatile A&&); // { dg-message "note" }
+
+int test5_13457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13457(c_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 356 }
+ sink_5_13457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 358 }
+ return 0;
+}
+
+one sink_5_13467( A&); // { dg-message "one sink_5_13467|no known conversion" }
+three sink_5_13467(volatile A&); // { dg-message "note" }
+four sink_5_13467(const volatile A&); // { dg-message "note" }
+six sink_5_13467(const A&&); // { dg-message "note" }
+seven sink_5_13467(volatile A&&); // { dg-message "note" }
+
+int test5_13467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 375 }
+ sink_5_13467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 377 }
+ return 0;
+}
+
+one sink_5_13567( A&); // { dg-message "one sink_5_13567|no known conversion" }
+three sink_5_13567(volatile A&); // { dg-message "note" }
+five sink_5_13567( A&&); // { dg-message "note" }
+six sink_5_13567(const A&&); // { dg-message "" }
+seven sink_5_13567(volatile A&&); // { dg-message "note" }
+
+int test5_13567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13567(ca); // { dg-error "lvalue" }
+ sink_5_13567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 395 }
+ sink_5_13567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 397 }
+ return 0;
+}
+
+one sink_5_13568( A&);
+three sink_5_13568(volatile A&);
+five sink_5_13568( A&&);
+six sink_5_13568(const A&&); // { dg-message "" }
+eight sink_5_13568(const volatile A&&); // { dg-message "" }
+
+int test5_13568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13568(ca); // { dg-error "lvalue" }
+ sink_5_13568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_13578( A&);
+three sink_5_13578(volatile A&);
+five sink_5_13578( A&&);
+seven sink_5_13578(volatile A&&);
+eight sink_5_13578(const volatile A&&); // { dg-message "" }
+
+int test5_13578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13578(ca); // { dg-error "lvalue" }
+ sink_5_13578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_5_13678( A&);
+three sink_5_13678(volatile A&);
+six sink_5_13678(const A&&); // { dg-message "" }
+seven sink_5_13678(volatile A&&); // { dg-message "note" }
+eight sink_5_13678(const volatile A&&); // { dg-message "" }
+
+int test5_13678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_13678(ca); // { dg-error "lvalue" }
+ sink_5_13678(cva); // { dg-error "lvalue" }
+ sink_5_13678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 450 }
+ return 0;
+}
+
+one sink_5_14567( A&); // { dg-message "one sink_5_14567|no known conversion" }
+four sink_5_14567(const volatile A&); // { dg-message "note" }
+five sink_5_14567( A&&); // { dg-message "note" }
+six sink_5_14567(const A&&); // { dg-message "note" }
+seven sink_5_14567(volatile A&&); // { dg-message "note" }
+
+int test5_14567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_14567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 467 }
+ return 0;
+}
+
+one sink_5_14678( A&);
+four sink_5_14678(const volatile A&);
+six sink_5_14678(const A&&); // { dg-message "note" }
+seven sink_5_14678(volatile A&&); // { dg-message "note" }
+eight sink_5_14678(const volatile A&&); // { dg-message "note" }
+
+int test5_14678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_14678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 484 }
+ return 0;
+}
+
+one sink_5_15678( A&);
+five sink_5_15678( A&&);
+six sink_5_15678(const A&&); // { dg-message "" }
+seven sink_5_15678(volatile A&&); // { dg-message "" }
+eight sink_5_15678(const volatile A&&); // { dg-message "" }
+
+int test5_15678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_15678(ca); // { dg-error "lvalue" }
+ sink_5_15678(va); // { dg-error "lvalue" }
+ sink_5_15678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_5_23456(const A&); // { dg-message "two sink_5_23456|no known conversion" }
+three sink_5_23456(volatile A&); // { dg-message "note" }
+four sink_5_23456(const volatile A&); // { dg-message "note" }
+five sink_5_23456( A&&); // { dg-message "note" }
+six sink_5_23456(const A&&); // { dg-message "note" }
+
+int test5_23456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23456(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 519 }
+ sink_5_23456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 521 }
+ sink_5_23456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 523 }
+ return 0;
+}
+
+two sink_5_23457(const A&); // { dg-message "two sink_5_23457|no known conversion" }
+three sink_5_23457(volatile A&); // { dg-message "note" }
+four sink_5_23457(const volatile A&); // { dg-message "note" }
+five sink_5_23457( A&&); // { dg-message "note" }
+seven sink_5_23457(volatile A&&); // { dg-message "note" }
+
+int test5_23457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23457(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 540 }
+ sink_5_23457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 542 }
+ return 0;
+}
+
+two sink_5_23458(const A&); // { dg-message "note" }
+three sink_5_23458(volatile A&); // { dg-message "note" }
+four sink_5_23458(const volatile A&); // { dg-message "note" }
+five sink_5_23458( A&&); // { dg-message "note" }
+eight sink_5_23458(const volatile A&&); // { dg-message "note" }
+
+int test5_23458()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23458(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 559 }
+ return 0;
+}
+
+two sink_5_23467(const A&); // { dg-message "two sink_5_23467|no known conversion" }
+three sink_5_23467(volatile A&); // { dg-message "note" }
+four sink_5_23467(const volatile A&); // { dg-message "note" }
+six sink_5_23467(const A&&); // { dg-message "note" }
+seven sink_5_23467(volatile A&&); // { dg-message "note" }
+
+int test5_23467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23467(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 576 }
+ sink_5_23467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 578 }
+ sink_5_23467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 580 }
+ return 0;
+}
+
+two sink_5_23468(const A&); // { dg-message "note" }
+three sink_5_23468(volatile A&); // { dg-message "note" }
+four sink_5_23468(const volatile A&); // { dg-message "note" }
+six sink_5_23468(const A&&); // { dg-message "note" }
+eight sink_5_23468(const volatile A&&); // { dg-message "note" }
+
+int test5_23468()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23468(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 597 }
+ return 0;
+}
+
+two sink_5_23478(const A&); // { dg-message "note" }
+three sink_5_23478(volatile A&); // { dg-message "note" }
+four sink_5_23478(const volatile A&); // { dg-message "note" }
+seven sink_5_23478(volatile A&&); // { dg-message "note" }
+eight sink_5_23478(const volatile A&&); // { dg-message "note" }
+
+int test5_23478()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23478(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 614 }
+ return 0;
+}
+
+two sink_5_23567(const A&); // { dg-message "two sink_5_23567|no known conversion" }
+three sink_5_23567(volatile A&); // { dg-message "note" }
+five sink_5_23567( A&&); // { dg-message "note" }
+six sink_5_23567(const A&&); // { dg-message "note" }
+seven sink_5_23567(volatile A&&); // { dg-message "note" }
+
+int test5_23567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23567(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 631 }
+ sink_5_23567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 633 }
+ sink_5_23567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 635 }
+ return 0;
+}
+
+two sink_5_23568(const A&); // { dg-message "note" }
+three sink_5_23568(volatile A&); // { dg-message "note" }
+five sink_5_23568( A&&); // { dg-message "note" }
+six sink_5_23568(const A&&); // { dg-message "note" }
+eight sink_5_23568(const volatile A&&); // { dg-message "" }
+
+int test5_23568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23568(cva); // { dg-error "lvalue" }
+ sink_5_23568(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 653 }
+ return 0;
+}
+
+two sink_5_23578(const A&); // { dg-message "note" }
+three sink_5_23578(volatile A&); // { dg-message "note" }
+five sink_5_23578( A&&); // { dg-message "note" }
+seven sink_5_23578(volatile A&&); // { dg-message "note" }
+eight sink_5_23578(const volatile A&&); // { dg-message "" }
+
+int test5_23578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23578(cva); // { dg-error "lvalue" }
+ sink_5_23578(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 671 }
+ return 0;
+}
+
+two sink_5_23678(const A&); // { dg-message "note" }
+three sink_5_23678(volatile A&); // { dg-message "note" }
+six sink_5_23678(const A&&); // { dg-message "note" }
+seven sink_5_23678(volatile A&&); // { dg-message "note" }
+eight sink_5_23678(const volatile A&&); // { dg-message "" }
+
+int test5_23678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_23678(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
+ sink_5_23678(cva); // { dg-error "lvalue" }
+ sink_5_23678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 691 }
+ return 0;
+}
+
+two sink_5_24567(const A&); // { dg-message "two sink_5_24567|no known conversion" }
+four sink_5_24567(const volatile A&); // { dg-message "note" }
+five sink_5_24567( A&&); // { dg-message "note" }
+six sink_5_24567(const A&&); // { dg-message "note" }
+seven sink_5_24567(volatile A&&); // { dg-message "note" }
+
+int test5_24567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_24567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 708 }
+ return 0;
+}
+
+two sink_5_24678(const A&); // { dg-message "note" }
+four sink_5_24678(const volatile A&);
+six sink_5_24678(const A&&); // { dg-message "note" }
+seven sink_5_24678(volatile A&&); // { dg-message "note" }
+eight sink_5_24678(const volatile A&&); // { dg-message "note" }
+
+int test5_24678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_24678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
+ return 0;
+}
+
+two sink_5_25678(const A&);
+five sink_5_25678( A&&);
+six sink_5_25678(const A&&);
+seven sink_5_25678(volatile A&&); // { dg-message "" }
+eight sink_5_25678(const volatile A&&); // { dg-message "" }
+
+int test5_25678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_25678(va); // { dg-error "lvalue" }
+ sink_5_25678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+three sink_5_34567(volatile A&); // { dg-message "three sink_5_34567|no known conversion" }
+four sink_5_34567(const volatile A&); // { dg-message "note" }
+five sink_5_34567( A&&); // { dg-message "note" }
+six sink_5_34567(const A&&); // { dg-message "note" }
+seven sink_5_34567(volatile A&&); // { dg-message "note" }
+
+int test5_34567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_34567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 759 }
+ return 0;
+}
+
+three sink_5_34678(volatile A&);
+four sink_5_34678(const volatile A&);
+six sink_5_34678(const A&&); // { dg-message "note" }
+seven sink_5_34678(volatile A&&); // { dg-message "note" }
+eight sink_5_34678(const volatile A&&); // { dg-message "note" }
+
+int test5_34678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_34678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 776 }
+ return 0;
+}
+
+three sink_5_35678(volatile A&);
+five sink_5_35678( A&&);
+six sink_5_35678(const A&&); // { dg-message "" }
+seven sink_5_35678(volatile A&&);
+eight sink_5_35678(const volatile A&&); // { dg-message "" }
+
+int test5_35678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_5_35678(ca); // { dg-error "lvalue" }
+ sink_5_35678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+int main()
+{
+ return test5_12356() + test5_12357() + test5_12367() + test5_12467() +
+ test5_12567() + test5_12678() + test5_13467() + test5_13567() +
+ test5_13678() + test5_13678() + test5_23456() + test5_23457() +
+ test5_23458() + test5_23467() + test5_23468() + test5_23478() +
+ test5_23567() + test5_23568() + test5_23578() + test5_23678() +
+ test5_24678() + test5_34678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5p.C
new file mode 100644
index 0000000..7030277
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv5p.C
@@ -0,0 +1,1256 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 5 at a time
+
+one sink_5_12345( A&);
+two sink_5_12345(const A&);
+three sink_5_12345(volatile A&);
+four sink_5_12345(const volatile A&);
+five sink_5_12345( A&&);
+
+int test5_12345()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12345(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12345(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12345(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12345(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12345(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12345(c_source())) == 2* sizeof(long)> t6;
+ return 0;
+}
+
+one sink_5_12346( A&);
+two sink_5_12346(const A&);
+three sink_5_12346(volatile A&);
+four sink_5_12346(const volatile A&);
+six sink_5_12346(const A&&);
+
+int test5_12346()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12346(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12346(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12346(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12346(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12346(source())) == 6* sizeof(long)> t5;
+ sa<sizeof(sink_5_12346(c_source())) == 6* sizeof(long)> t6;
+ return 0;
+}
+
+one sink_5_12347( A&);
+two sink_5_12347(const A&);
+three sink_5_12347(volatile A&);
+four sink_5_12347(const volatile A&);
+seven sink_5_12347(volatile A&&);
+
+int test5_12347()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12347(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12347(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12347(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12347(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12347(source())) == 7* sizeof(long)> t5;
+ sa<sizeof(sink_5_12347(c_source())) == 2* sizeof(long)> t6;
+ sa<sizeof(sink_5_12347(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_12348( A&);
+two sink_5_12348(const A&);
+three sink_5_12348(volatile A&);
+four sink_5_12348(const volatile A&);
+eight sink_5_12348(const volatile A&&);
+
+int test5_12348()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12348(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12348(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12348(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12348(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12348(source())) == 8* sizeof(long)> t5;
+ sa<sizeof(sink_5_12348(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_12348(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_12348(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12356( A&);
+two sink_5_12356(const A&);
+three sink_5_12356(volatile A&);
+five sink_5_12356( A&&);
+six sink_5_12356(const A&&);
+
+int test5_12356()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12356(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12356(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12356(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12356(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12356(c_source())) == 6* sizeof(long)> t6;
+ return 0;
+}
+
+one sink_5_12357( A&);
+two sink_5_12357(const A&);
+three sink_5_12357(volatile A&);
+five sink_5_12357( A&&);
+seven sink_5_12357(volatile A&&);
+
+int test5_12357()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12357(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12357(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12357(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12357(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12357(c_source())) == 2* sizeof(long)> t6;
+ sa<sizeof(sink_5_12357(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_12358( A&);
+two sink_5_12358(const A&);
+three sink_5_12358(volatile A&);
+five sink_5_12358( A&&);
+eight sink_5_12358(const volatile A&&);
+
+int test5_12358()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12358(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12358(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12358(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12358(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12358(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_12358(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_12358(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12367( A&);
+two sink_5_12367(const A&);
+three sink_5_12367(volatile A&);
+six sink_5_12367(const A&&);
+seven sink_5_12367(volatile A&&);
+
+int test5_12367()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12367(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12367(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12367(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12367(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12367(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_12368( A&);
+two sink_5_12368(const A&);
+three sink_5_12368(volatile A&);
+six sink_5_12368(const A&&);
+eight sink_5_12368(const volatile A&&);
+
+int test5_12368()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12368(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12368(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12368(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12368(source())) == 6* sizeof(long)> t5;
+ sa<sizeof(sink_5_12368(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12368(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_12368(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12378( A&);
+two sink_5_12378(const A&);
+three sink_5_12378(volatile A&);
+seven sink_5_12378(volatile A&&);
+eight sink_5_12378(const volatile A&&);
+
+int test5_12378()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12378(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12378(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12378(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_12378(source())) == 7* sizeof(long)> t5;
+ sa<sizeof(sink_5_12378(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_12378(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_12378(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12456( A&);
+two sink_5_12456(const A&);
+four sink_5_12456(const volatile A&);
+five sink_5_12456( A&&);
+six sink_5_12456(const A&&);
+
+int test5_12456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12456(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12456(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12456(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_12456(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12456(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12456(c_source())) == 6* sizeof(long)> t6;
+ return 0;
+}
+
+one sink_5_12457( A&);
+two sink_5_12457(const A&);
+four sink_5_12457(const volatile A&);
+five sink_5_12457( A&&);
+seven sink_5_12457(volatile A&&);
+
+int test5_12457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12457(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12457(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12457(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_12457(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12457(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12457(c_source())) == 2* sizeof(long)> t6;
+ sa<sizeof(sink_5_12457(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_12458( A&);
+two sink_5_12458(const A&);
+four sink_5_12458(const volatile A&);
+five sink_5_12458( A&&);
+eight sink_5_12458(const volatile A&&);
+
+int test5_12458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12458(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12458(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12458(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_12458(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12458(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12458(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_12458(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_12458(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12467( A&);
+two sink_5_12467(const A&);
+four sink_5_12467(const volatile A&);
+six sink_5_12467(const A&&);
+seven sink_5_12467(volatile A&&);
+
+int test5_12467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12467(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12467(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12467(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_12467(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12467(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12467(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_12468( A&);
+two sink_5_12468(const A&);
+four sink_5_12468(const volatile A&);
+six sink_5_12468(const A&&);
+eight sink_5_12468(const volatile A&&);
+
+int test5_12468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12468(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12468(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12468(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_12468(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12468(source())) == 6* sizeof(long)> t5;
+ sa<sizeof(sink_5_12468(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12468(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_12468(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12478( A&);
+two sink_5_12478(const A&);
+four sink_5_12478(const volatile A&);
+seven sink_5_12478(volatile A&&);
+eight sink_5_12478(const volatile A&&);
+
+int test5_12478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12478(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12478(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12478(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_12478(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_12478(source())) == 7* sizeof(long)> t5;
+ sa<sizeof(sink_5_12478(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_12478(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_12478(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12567( A&);
+two sink_5_12567(const A&);
+five sink_5_12567( A&&);
+six sink_5_12567(const A&&);
+seven sink_5_12567(volatile A&&);
+
+int test5_12567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12567(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12567(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12567(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12567(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12567(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_12568( A&);
+two sink_5_12568(const A&);
+five sink_5_12568( A&&);
+six sink_5_12568(const A&&);
+eight sink_5_12568(const volatile A&&);
+
+int test5_12568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12568(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12568(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12568(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12568(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12568(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_12568(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12578( A&);
+two sink_5_12578(const A&);
+five sink_5_12578( A&&);
+seven sink_5_12578(volatile A&&);
+eight sink_5_12578(const volatile A&&);
+
+int test5_12578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12578(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12578(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12578(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_12578(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_12578(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_12578(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_12678( A&);
+two sink_5_12678(const A&);
+six sink_5_12678(const A&&);
+seven sink_5_12678(volatile A&&);
+eight sink_5_12678(const volatile A&&);
+
+int test5_12678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_12678(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_12678(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_12678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_12678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_12678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_13456( A&);
+three sink_5_13456(volatile A&);
+four sink_5_13456(const volatile A&);
+five sink_5_13456( A&&);
+six sink_5_13456(const A&&);
+
+int test5_13456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13456(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13456(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_13456(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13456(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_13456(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_13456(c_source())) == 6* sizeof(long)> t6;
+ return 0;
+}
+
+one sink_5_13457( A&);
+three sink_5_13457(volatile A&);
+four sink_5_13457(const volatile A&);
+five sink_5_13457( A&&);
+seven sink_5_13457(volatile A&&);
+
+int test5_13457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13457(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13457(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_13457(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13457(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_13457(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_13457(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_13458( A&);
+three sink_5_13458(volatile A&);
+four sink_5_13458(const volatile A&);
+five sink_5_13458( A&&);
+eight sink_5_13458(const volatile A&&);
+
+int test5_13458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13458(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13458(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_13458(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13458(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_13458(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_13458(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_13458(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_13458(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_13467( A&);
+three sink_5_13467(volatile A&);
+four sink_5_13467(const volatile A&);
+six sink_5_13467(const A&&);
+seven sink_5_13467(volatile A&&);
+
+int test5_13467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13467(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13467(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_13467(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13467(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_13467(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_13467(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_13468( A&);
+three sink_5_13468(volatile A&);
+four sink_5_13468(const volatile A&);
+six sink_5_13468(const A&&);
+eight sink_5_13468(const volatile A&&);
+
+int test5_13468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13468(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13468(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_13468(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13468(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_13468(source())) == 6* sizeof(long)> t5;
+ sa<sizeof(sink_5_13468(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_13468(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_13468(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_13478( A&);
+three sink_5_13478(volatile A&);
+four sink_5_13478(const volatile A&);
+seven sink_5_13478(volatile A&&);
+eight sink_5_13478(const volatile A&&);
+
+int test5_13478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13478(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13478(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_13478(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13478(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_13478(source())) == 7* sizeof(long)> t5;
+ sa<sizeof(sink_5_13478(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_13478(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_13478(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_13567( A&);
+three sink_5_13567(volatile A&);
+five sink_5_13567( A&&);
+six sink_5_13567(const A&&);
+seven sink_5_13567(volatile A&&);
+
+int test5_13567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13567(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13567(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13567(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_13567(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_13567(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_13568( A&);
+three sink_5_13568(volatile A&);
+five sink_5_13568( A&&);
+six sink_5_13568(const A&&);
+eight sink_5_13568(const volatile A&&);
+
+int test5_13568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13568(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13568(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13568(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_13568(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_13568(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_13568(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_13578( A&);
+three sink_5_13578(volatile A&);
+five sink_5_13578( A&&);
+seven sink_5_13578(volatile A&&);
+eight sink_5_13578(const volatile A&&);
+
+int test5_13578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13578(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13578(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13578(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_13578(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_13578(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_13578(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_13678( A&);
+three sink_5_13678(volatile A&);
+six sink_5_13678(const A&&);
+seven sink_5_13678(volatile A&&);
+eight sink_5_13678(const volatile A&&);
+
+int test5_13678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_13678(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_13678(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_13678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_13678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_13678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_14567( A&);
+four sink_5_14567(const volatile A&);
+five sink_5_14567( A&&);
+six sink_5_14567(const A&&);
+seven sink_5_14567(volatile A&&);
+
+int test5_14567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_14567(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_14567(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_14567(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_14567(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_14567(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_14567(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_14567(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+one sink_5_14568( A&);
+four sink_5_14568(const volatile A&);
+five sink_5_14568( A&&);
+six sink_5_14568(const A&&);
+eight sink_5_14568(const volatile A&&);
+
+int test5_14568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_14568(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_14568(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_14568(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_14568(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_14568(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_14568(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_14568(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_14568(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_14578( A&);
+four sink_5_14578(const volatile A&);
+five sink_5_14578( A&&);
+seven sink_5_14578(volatile A&&);
+eight sink_5_14578(const volatile A&&);
+
+int test5_14578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_14578(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_14578(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_14578(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_14578(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_14578(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_14578(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_14578(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_14578(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_14678( A&);
+four sink_5_14678(const volatile A&);
+six sink_5_14678(const A&&);
+seven sink_5_14678(volatile A&&);
+eight sink_5_14678(const volatile A&&);
+
+int test5_14678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_14678(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_14678(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_14678(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_14678(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_14678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_14678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_14678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+one sink_5_15678( A&);
+five sink_5_15678( A&&);
+six sink_5_15678(const A&&);
+seven sink_5_15678(volatile A&&);
+eight sink_5_15678(const volatile A&&);
+
+int test5_15678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_15678(a)) == 1* sizeof(long)> t1;
+ sa<sizeof(sink_5_15678(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_15678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_15678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_15678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_23456(const A&);
+three sink_5_23456(volatile A&);
+four sink_5_23456(const volatile A&);
+five sink_5_23456( A&&);
+six sink_5_23456(const A&&);
+
+int test5_23456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23456(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23456(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23456(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_23456(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_23456(c_source())) == 6* sizeof(long)> t6;
+ return 0;
+}
+
+two sink_5_23457(const A&);
+three sink_5_23457(volatile A&);
+four sink_5_23457(const volatile A&);
+five sink_5_23457( A&&);
+seven sink_5_23457(volatile A&&);
+
+int test5_23457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23457(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23457(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23457(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_23457(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_23457(c_source())) == 2* sizeof(long)> t6;
+ sa<sizeof(sink_5_23457(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+two sink_5_23458(const A&);
+three sink_5_23458(volatile A&);
+four sink_5_23458(const volatile A&);
+five sink_5_23458( A&&);
+eight sink_5_23458(const volatile A&&);
+
+int test5_23458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23458(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23458(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23458(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_23458(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_23458(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_23458(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_23458(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_23467(const A&);
+three sink_5_23467(volatile A&);
+four sink_5_23467(const volatile A&);
+six sink_5_23467(const A&&);
+seven sink_5_23467(volatile A&&);
+
+int test5_23467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23467(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23467(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23467(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_23467(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_23467(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+two sink_5_23468(const A&);
+three sink_5_23468(volatile A&);
+four sink_5_23468(const volatile A&);
+six sink_5_23468(const A&&);
+eight sink_5_23468(const volatile A&&);
+
+int test5_23468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23468(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23468(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23468(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_23468(source())) == 6* sizeof(long)> t5;
+ sa<sizeof(sink_5_23468(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_23468(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_23468(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_23478(const A&);
+three sink_5_23478(volatile A&);
+four sink_5_23478(const volatile A&);
+seven sink_5_23478(volatile A&&);
+eight sink_5_23478(const volatile A&&);
+
+int test5_23478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23478(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23478(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23478(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_23478(source())) == 7* sizeof(long)> t5;
+ sa<sizeof(sink_5_23478(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_23478(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_23478(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_23567(const A&);
+three sink_5_23567(volatile A&);
+five sink_5_23567( A&&);
+six sink_5_23567(const A&&);
+seven sink_5_23567(volatile A&&);
+
+int test5_23567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23567(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23567(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23567(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_23567(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_23567(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+two sink_5_23568(const A&);
+three sink_5_23568(volatile A&);
+five sink_5_23568( A&&);
+six sink_5_23568(const A&&);
+eight sink_5_23568(const volatile A&&);
+
+int test5_23568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23568(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23568(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23568(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_23568(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_23568(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_23568(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_23578(const A&);
+three sink_5_23578(volatile A&);
+five sink_5_23578( A&&);
+seven sink_5_23578(volatile A&&);
+eight sink_5_23578(const volatile A&&);
+
+int test5_23578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23578(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23578(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23578(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_23578(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_23578(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_23578(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_23678(const A&);
+three sink_5_23678(volatile A&);
+six sink_5_23678(const A&&);
+seven sink_5_23678(volatile A&&);
+eight sink_5_23678(const volatile A&&);
+
+int test5_23678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_23678(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_23678(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_23678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_23678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_23678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_24567(const A&);
+four sink_5_24567(const volatile A&);
+five sink_5_24567( A&&);
+six sink_5_24567(const A&&);
+seven sink_5_24567(volatile A&&);
+
+int test5_24567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_24567(a)) == 2* sizeof(long)> t1;
+ sa<sizeof(sink_5_24567(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_24567(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_24567(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_24567(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_24567(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_24567(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+two sink_5_24568(const A&);
+four sink_5_24568(const volatile A&);
+five sink_5_24568( A&&);
+six sink_5_24568(const A&&);
+eight sink_5_24568(const volatile A&&);
+
+int test5_24568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_24568(a)) == 2* sizeof(long)> t1;
+ sa<sizeof(sink_5_24568(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_24568(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_24568(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_24568(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_24568(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_24568(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_24568(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_24578(const A&);
+four sink_5_24578(const volatile A&);
+five sink_5_24578( A&&);
+seven sink_5_24578(volatile A&&);
+eight sink_5_24578(const volatile A&&);
+
+int test5_24578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_24578(a)) == 2* sizeof(long)> t1;
+ sa<sizeof(sink_5_24578(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_24578(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_24578(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_24578(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_24578(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_24578(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_24578(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_24678(const A&);
+four sink_5_24678(const volatile A&);
+six sink_5_24678(const A&&);
+seven sink_5_24678(volatile A&&);
+eight sink_5_24678(const volatile A&&);
+
+int test5_24678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_24678(a)) == 2* sizeof(long)> t1;
+ sa<sizeof(sink_5_24678(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_24678(va)) == 4* sizeof(long)> t3;
+ sa<sizeof(sink_5_24678(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_24678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_24678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_24678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+two sink_5_25678(const A&);
+five sink_5_25678( A&&);
+six sink_5_25678(const A&&);
+seven sink_5_25678(volatile A&&);
+eight sink_5_25678(const volatile A&&);
+
+int test5_25678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_25678(a)) == 2* sizeof(long)> t1;
+ sa<sizeof(sink_5_25678(ca)) == 2* sizeof(long)> t2;
+ sa<sizeof(sink_5_25678(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_25678(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_25678(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_25678(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+three sink_5_34567(volatile A&);
+four sink_5_34567(const volatile A&);
+five sink_5_34567( A&&);
+six sink_5_34567(const A&&);
+seven sink_5_34567(volatile A&&);
+
+int test5_34567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_34567(a)) == 3* sizeof(long)> t1;
+ sa<sizeof(sink_5_34567(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_34567(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_34567(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_34567(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_34567(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_34567(v_source())) == 7* sizeof(long)> t7;
+ return 0;
+}
+
+three sink_5_34568(volatile A&);
+four sink_5_34568(const volatile A&);
+five sink_5_34568( A&&);
+six sink_5_34568(const A&&);
+eight sink_5_34568(const volatile A&&);
+
+int test5_34568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_34568(a)) == 3* sizeof(long)> t1;
+ sa<sizeof(sink_5_34568(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_34568(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_34568(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_34568(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_34568(c_source())) == 6* sizeof(long)> t6;
+ sa<sizeof(sink_5_34568(v_source())) == 8* sizeof(long)> t7;
+ sa<sizeof(sink_5_34568(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+three sink_5_34578(volatile A&);
+four sink_5_34578(const volatile A&);
+five sink_5_34578( A&&);
+seven sink_5_34578(volatile A&&);
+eight sink_5_34578(const volatile A&&);
+
+int test5_34578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_34578(a)) == 3* sizeof(long)> t1;
+ sa<sizeof(sink_5_34578(ca)) == 4* sizeof(long)> t2;
+ sa<sizeof(sink_5_34578(va)) == 3* sizeof(long)> t3;
+ sa<sizeof(sink_5_34578(cva)) == 4* sizeof(long)> t4;
+ sa<sizeof(sink_5_34578(source())) == 5* sizeof(long)> t5;
+ sa<sizeof(sink_5_34578(c_source())) == 8* sizeof(long)> t6;
+ sa<sizeof(sink_5_34578(v_source())) == 7* sizeof(long)> t7;
+ sa<sizeof(sink_5_34578(cv_source())) == 8* sizeof(long)> t8;
+ return 0;
+}
+
+three sink_5_34678(volatile A&);
+four sink_5_34678(const volatile A&);
+six sink_5_34678(const A&&);
+seven sink_5_34678(volatile A&&);
+eight sink_5_34678(const volatile A&&);
+
+int test5_34678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_34678(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_5_34678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_5_34678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_5_34678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_5_34678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_5_34678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_5_34678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_5_35678(volatile A&);
+five sink_5_35678( A&&);
+six sink_5_35678(const A&&);
+seven sink_5_35678(volatile A&&);
+eight sink_5_35678(const volatile A&&);
+
+int test5_35678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_35678(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_5_35678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_5_35678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_5_35678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_5_35678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_5_35678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+four sink_5_45678(const volatile A&);
+five sink_5_45678( A&&);
+six sink_5_45678(const A&&);
+seven sink_5_45678(volatile A&&);
+eight sink_5_45678(const volatile A&&);
+
+int test5_45678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_5_45678(a)) == 4 * sizeof(long)> t1;
+ sa<sizeof(sink_5_45678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_5_45678(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_5_45678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_5_45678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_5_45678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_5_45678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_5_45678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test5_12345() + test5_12346() + test5_12347() + test5_12348() +
+ test5_12356() + test5_12357() + test5_12358() + test5_12367() +
+ test5_12368() + test5_12378() + test5_12456() + test5_12457() +
+ test5_12458() + test5_12467() + test5_12468() + test5_12478() +
+ test5_12567() + test5_12568() + test5_12578() + test5_12678() +
+ test5_13456() + test5_13457() + test5_13458() + test5_13467() +
+ test5_13468() + test5_13478() + test5_13567() + test5_13568() +
+ test5_13578() + test5_13678() + test5_14567() + test5_14568() +
+ test5_14578() + test5_14678() + test5_15678() + test5_23456() +
+ test5_23457() + test5_23458() + test5_23467() + test5_23468() +
+ test5_23478() + test5_23567() + test5_23568() + test5_23578() +
+ test5_23678() + test5_24567() + test5_24568() + test5_24578() +
+ test5_24678() + test5_25678() + test5_34567() + test5_34568() +
+ test5_34578() + test5_34678() + test5_35678() + test5_45678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6n.C
new file mode 100644
index 0000000..d00c1e2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6n.C
@@ -0,0 +1,372 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 6 at a time
+
+one sink_6_123456( A&); // { dg-message "one sink_6_123456|no known conversion" }
+two sink_6_123456(const A&); // { dg-message "note" }
+three sink_6_123456(volatile A&); // { dg-message "note" }
+four sink_6_123456(const volatile A&); // { dg-message "note" }
+five sink_6_123456( A&&); // { dg-message "note" }
+six sink_6_123456(const A&&); // { dg-message "note" }
+
+int test6_123456()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123456(v_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 46 }
+ sink_6_123456(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 48 }
+ return 0;
+}
+
+one sink_6_123457( A&); // { dg-message "one sink_6_123457|no known conversion" }
+two sink_6_123457(const A&); // { dg-message "note" }
+three sink_6_123457(volatile A&); // { dg-message "note" }
+four sink_6_123457(const volatile A&); // { dg-message "note" }
+five sink_6_123457( A&&); // { dg-message "note" }
+seven sink_6_123457(volatile A&&); // { dg-message "note" }
+
+int test6_123457()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123457(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
+ return 0;
+}
+
+two sink_6_235678(const A&); // { dg-message "note" }
+three sink_6_235678(volatile A&); // { dg-message "note" }
+five sink_6_235678( A&&); // { dg-message "note" }
+six sink_6_235678(const A&&); // { dg-message "note" }
+seven sink_6_235678(volatile A&&); // { dg-message "note" }
+eight sink_6_235678(const volatile A&&); // { dg-message "" }
+
+int test6_235678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_235678(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 84 }
+ sink_6_235678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_6_234678(const A&); // { dg-message "note" }
+three sink_6_234678(volatile A&); // { dg-message "note" }
+four sink_6_234678(const volatile A&); // { dg-message "note" }
+six sink_6_234678(const A&&); // { dg-message "note" }
+seven sink_6_234678(volatile A&&); // { dg-message "note" }
+eight sink_6_234678(const volatile A&&); // { dg-message "note" }
+
+int test6_234678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_234678(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 103 }
+ sink_6_234678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 105 }
+ return 0;
+}
+
+two sink_6_234578(const A&); // { dg-message "note" }
+three sink_6_234578(volatile A&); // { dg-message "note" }
+four sink_6_234578(const volatile A&); // { dg-message "note" }
+five sink_6_234578( A&&); // { dg-message "note" }
+seven sink_6_234578(volatile A&&); // { dg-message "note" }
+eight sink_6_234578(const volatile A&&); // { dg-message "note" }
+
+int test6_234578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_234578(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 123 }
+ return 0;
+}
+
+two sink_6_234568(const A&); // { dg-message "note" }
+three sink_6_234568(volatile A&); // { dg-message "note" }
+four sink_6_234568(const volatile A&); // { dg-message "note" }
+five sink_6_234568( A&&); // { dg-message "note" }
+six sink_6_234568(const A&&); // { dg-message "note" }
+eight sink_6_234568(const volatile A&&); // { dg-message "note" }
+
+int test6_234568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_234568(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 141 }
+ return 0;
+}
+
+two sink_6_234567(const A&); // { dg-message "two sink_6_234567|no known conversion" }
+three sink_6_234567(volatile A&); // { dg-message "note" }
+four sink_6_234567(const volatile A&); // { dg-message "note" }
+five sink_6_234567( A&&); // { dg-message "note" }
+six sink_6_234567(const A&&); // { dg-message "note" }
+seven sink_6_234567(volatile A&&); // { dg-message "note" }
+
+int test6_234567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_234567(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 159 }
+ sink_6_234567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 161 }
+ return 0;
+}
+
+one sink_6_134678( A&);
+three sink_6_134678(volatile A&);
+four sink_6_134678(const volatile A&);
+six sink_6_134678(const A&&); // { dg-message "note" }
+seven sink_6_134678(volatile A&&); // { dg-message "note" }
+eight sink_6_134678(const volatile A&&); // { dg-message "note" }
+
+int test6_134678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_134678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 179 }
+ return 0;
+}
+
+one sink_6_124678( A&);
+two sink_6_124678(const A&); // { dg-message "note" }
+four sink_6_124678(const volatile A&);
+six sink_6_124678(const A&&); // { dg-message "note" }
+seven sink_6_124678(volatile A&&); // { dg-message "note" }
+eight sink_6_124678(const volatile A&&); // { dg-message "note" }
+
+int test6_124678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_124678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 197 }
+ return 0;
+}
+
+one sink_6_123678( A&);
+two sink_6_123678(const A&); // { dg-message "note" }
+three sink_6_123678(volatile A&);
+six sink_6_123678(const A&&); // { dg-message "note" }
+seven sink_6_123678(volatile A&&); // { dg-message "note" }
+eight sink_6_123678(const volatile A&&); // { dg-message "" }
+
+int test6_123678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123678(cva); // { dg-error "lvalue" }
+ sink_6_123678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 216 }
+ return 0;
+}
+
+one sink_6_123567( A&); // { dg-message "one sink_6_123567|no known conversion" }
+two sink_6_123567(const A&); // { dg-message "note" }
+three sink_6_123567(volatile A&); // { dg-message "note" }
+five sink_6_123567( A&&); // { dg-message "note" }
+six sink_6_123567(const A&&); // { dg-message "note" }
+seven sink_6_123567(volatile A&&); // { dg-message "note" }
+
+int test6_123567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123567(cva); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 234 }
+ sink_6_123567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 236 }
+ return 0;
+}
+
+one sink_6_123568( A&);
+two sink_6_123568(const A&);
+three sink_6_123568(volatile A&);
+five sink_6_123568( A&&);
+six sink_6_123568(const A&&);
+eight sink_6_123568(const volatile A&&); // { dg-message "" }
+
+int test6_123568()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123568(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_6_123578( A&);
+two sink_6_123578(const A&);
+three sink_6_123578(volatile A&);
+five sink_6_123578( A&&);
+seven sink_6_123578(volatile A&&);
+eight sink_6_123578(const volatile A&&); // { dg-message "" }
+
+int test6_123578()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123578(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_6_123467( A&); // { dg-message "one sink_6_123467|no known conversion" }
+two sink_6_123467(const A&); // { dg-message "note" }
+three sink_6_123467(volatile A&); // { dg-message "note" }
+four sink_6_123467(const volatile A&); // { dg-message "note" }
+six sink_6_123467(const A&&); // { dg-message "note" }
+seven sink_6_123467(volatile A&&); // { dg-message "note" }
+
+int test6_123467()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_123467(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 288 }
+ sink_6_123467(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 290 }
+ return 0;
+}
+
+one sink_6_124567( A&); // { dg-message "one sink_6_124567|no known conversion" }
+two sink_6_124567(const A&); // { dg-message "note" }
+four sink_6_124567(const volatile A&); // { dg-message "note" }
+five sink_6_124567( A&&); // { dg-message "note" }
+six sink_6_124567(const A&&); // { dg-message "note" }
+seven sink_6_124567(volatile A&&); // { dg-message "note" }
+
+int test6_124567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_124567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 308 }
+ return 0;
+}
+
+one sink_6_125678( A&);
+two sink_6_125678(const A&);
+five sink_6_125678( A&&);
+six sink_6_125678(const A&&);
+seven sink_6_125678(volatile A&&); // { dg-message "" }
+eight sink_6_125678(const volatile A&&); // { dg-message "" }
+
+int test6_125678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_125678(va); // { dg-error "lvalue" }
+ sink_6_125678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+one sink_6_134567( A&); // { dg-message "one sink_6_134567|no known conversion" }
+three sink_6_134567(volatile A&); // { dg-message "note" }
+four sink_6_134567(const volatile A&); // { dg-message "note" }
+five sink_6_134567( A&&); // { dg-message "note" }
+six sink_6_134567(const A&&); // { dg-message "note" }
+seven sink_6_134567(volatile A&&); // { dg-message "note" }
+
+int test6_134567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_134567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 344 }
+ return 0;
+}
+
+one sink_6_135678( A&);
+three sink_6_135678(volatile A&);
+five sink_6_135678( A&&);
+six sink_6_135678(const A&&); // { dg-message "" }
+seven sink_6_135678(volatile A&&);
+eight sink_6_135678(const volatile A&&); // { dg-message "" }
+
+int test6_135678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_6_135678(ca); // { dg-error "lvalue" }
+ sink_6_135678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+int main()
+{
+ return test6_235678() + test6_234678() + test6_234578() + test6_234568() +
+ test6_234567() + test6_134678() + test6_124678() + test6_123678() +
+ test6_123567();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6p.C
new file mode 100644
index 0000000..4be8343
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv6p.C
@@ -0,0 +1,687 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 6 at a time
+
+one sink_6_123456( A&);
+two sink_6_123456(const A&);
+three sink_6_123456(volatile A&);
+four sink_6_123456(const volatile A&);
+five sink_6_123456( A&&);
+six sink_6_123456(const A&&);
+
+int test6_123456()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123456(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123456(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123456(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123456(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_123456(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123456(c_source())) == 6 * sizeof(long)> t6;
+ return 0;
+}
+
+one sink_6_123457( A&);
+two sink_6_123457(const A&);
+three sink_6_123457(volatile A&);
+four sink_6_123457(const volatile A&);
+five sink_6_123457( A&&);
+seven sink_6_123457(volatile A&&);
+
+int test6_123457()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123457(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123457(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123457(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123457(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_123457(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123457(c_source())) == 2 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123457(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_6_123458( A&);
+two sink_6_123458(const A&);
+three sink_6_123458(volatile A&);
+four sink_6_123458(const volatile A&);
+five sink_6_123458( A&&);
+eight sink_6_123458(const volatile A&&);
+
+int test6_123458()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123458(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123458(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123458(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123458(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_123458(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123458(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123458(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_6_123458(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_123467( A&);
+two sink_6_123467(const A&);
+three sink_6_123467(volatile A&);
+four sink_6_123467(const volatile A&);
+six sink_6_123467(const A&&);
+seven sink_6_123467(volatile A&&);
+
+int test6_123467()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123467(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123467(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123467(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123467(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_123467(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123467(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_6_123468( A&);
+two sink_6_123468(const A&);
+three sink_6_123468(volatile A&);
+four sink_6_123468(const volatile A&);
+six sink_6_123468(const A&&);
+eight sink_6_123468(const volatile A&&);
+
+int test6_123468()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123468(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123468(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123468(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123468(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_123468(source())) == 6 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123468(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123468(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_6_123468(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_123478( A&);
+two sink_6_123478(const A&);
+three sink_6_123478(volatile A&);
+four sink_6_123478(const volatile A&);
+seven sink_6_123478(volatile A&&);
+eight sink_6_123478(const volatile A&&);
+
+int test6_123478()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123478(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123478(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123478(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123478(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_123478(source())) == 7 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123478(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123478(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_123478(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_123567( A&);
+two sink_6_123567(const A&);
+three sink_6_123567(volatile A&);
+five sink_6_123567( A&&);
+six sink_6_123567(const A&&);
+seven sink_6_123567(volatile A&&);
+
+int test6_123567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123567(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123567(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123567(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_6_123568( A&);
+two sink_6_123568(const A&);
+three sink_6_123568(volatile A&);
+five sink_6_123568( A&&);
+six sink_6_123568(const A&&);
+eight sink_6_123568(const volatile A&&);
+
+int test6_123568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123568(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123568(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123568(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_6_123568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_123578( A&);
+two sink_6_123578(const A&);
+three sink_6_123578(volatile A&);
+five sink_6_123578( A&&);
+seven sink_6_123578(volatile A&&);
+eight sink_6_123578(const volatile A&&);
+
+int test6_123578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123578(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123578(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123578(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_123578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_123578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_123678( A&);
+two sink_6_123678(const A&);
+three sink_6_123678(volatile A&);
+six sink_6_123678(const A&&);
+seven sink_6_123678(volatile A&&);
+eight sink_6_123678(const volatile A&&);
+
+int test6_123678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_123678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_123678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_123678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_123678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_123678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_123678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_124567( A&);
+two sink_6_124567(const A&);
+four sink_6_124567(const volatile A&);
+five sink_6_124567( A&&);
+six sink_6_124567(const A&&);
+seven sink_6_124567(volatile A&&);
+
+int test6_124567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_124567(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_124567(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_124567(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_6_124567(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_124567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_124567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_124567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_6_124568( A&);
+two sink_6_124568(const A&);
+four sink_6_124568(const volatile A&);
+five sink_6_124568( A&&);
+six sink_6_124568(const A&&);
+eight sink_6_124568(const volatile A&&);
+
+int test6_124568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_124568(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_124568(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_124568(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_6_124568(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_124568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_124568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_124568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_6_124568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_124578( A&);
+two sink_6_124578(const A&);
+four sink_6_124578(const volatile A&);
+five sink_6_124578( A&&);
+seven sink_6_124578(volatile A&&);
+eight sink_6_124578(const volatile A&&);
+
+int test6_124578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_124578(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_124578(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_124578(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_6_124578(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_124578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_124578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_6_124578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_124578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_124678( A&);
+two sink_6_124678(const A&);
+four sink_6_124678(const volatile A&);
+six sink_6_124678(const A&&);
+seven sink_6_124678(volatile A&&);
+eight sink_6_124678(const volatile A&&);
+
+int test6_124678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_124678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_124678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_124678(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_6_124678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_124678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_124678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_124678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_125678( A&);
+two sink_6_125678(const A&);
+five sink_6_125678( A&&);
+six sink_6_125678(const A&&);
+seven sink_6_125678(volatile A&&);
+eight sink_6_125678(const volatile A&&);
+
+int test6_125678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_125678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_125678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_125678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_125678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_125678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_125678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_134567( A&);
+three sink_6_134567(volatile A&);
+four sink_6_134567(const volatile A&);
+five sink_6_134567( A&&);
+six sink_6_134567(const A&&);
+seven sink_6_134567(volatile A&&);
+
+int test6_134567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_134567(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_134567(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_6_134567(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_134567(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_134567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_134567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_134567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_6_134568( A&);
+three sink_6_134568(volatile A&);
+four sink_6_134568(const volatile A&);
+five sink_6_134568( A&&);
+six sink_6_134568(const A&&);
+eight sink_6_134568(const volatile A&&);
+
+int test6_134568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_134568(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_134568(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_6_134568(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_134568(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_134568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_134568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_134568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_6_134568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_134578( A&);
+three sink_6_134578(volatile A&);
+four sink_6_134578(const volatile A&);
+five sink_6_134578( A&&);
+seven sink_6_134578(volatile A&&);
+eight sink_6_134578(const volatile A&&);
+
+int test6_134578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_134578(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_134578(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_6_134578(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_134578(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_134578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_134578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_6_134578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_134578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_134678( A&);
+three sink_6_134678(volatile A&);
+four sink_6_134678(const volatile A&);
+six sink_6_134678(const A&&);
+seven sink_6_134678(volatile A&&);
+eight sink_6_134678(const volatile A&&);
+
+int test6_134678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_134678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_134678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_6_134678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_134678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_134678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_134678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_134678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_135678( A&);
+three sink_6_135678(volatile A&);
+five sink_6_135678( A&&);
+six sink_6_135678(const A&&);
+seven sink_6_135678(volatile A&&);
+eight sink_6_135678(const volatile A&&);
+
+int test6_135678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_135678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_135678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_135678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_135678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_135678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_135678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_6_145678( A&);
+four sink_6_145678(const volatile A&);
+five sink_6_145678( A&&);
+six sink_6_145678(const A&&);
+seven sink_6_145678(volatile A&&);
+eight sink_6_145678(const volatile A&&);
+
+int test6_145678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_145678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_6_145678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_6_145678(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_6_145678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_145678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_145678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_145678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_145678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_6_234567(const A&);
+three sink_6_234567(volatile A&);
+four sink_6_234567(const volatile A&);
+five sink_6_234567( A&&);
+six sink_6_234567(const A&&);
+seven sink_6_234567(volatile A&&);
+
+int test6_234567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_234567(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_234567(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_234567(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_234567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_234567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_234567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+two sink_6_234568(const A&);
+three sink_6_234568(volatile A&);
+four sink_6_234568(const volatile A&);
+five sink_6_234568( A&&);
+six sink_6_234568(const A&&);
+eight sink_6_234568(const volatile A&&);
+
+int test6_234568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_234568(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_234568(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_234568(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_234568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_234568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_234568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_6_234568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_6_234578(const A&);
+three sink_6_234578(volatile A&);
+four sink_6_234578(const volatile A&);
+five sink_6_234578( A&&);
+seven sink_6_234578(volatile A&&);
+eight sink_6_234578(const volatile A&&);
+
+int test6_234578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_234578(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_234578(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_234578(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_234578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_234578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_6_234578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_234578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_6_234678(const A&);
+three sink_6_234678(volatile A&);
+four sink_6_234678(const volatile A&);
+six sink_6_234678(const A&&);
+seven sink_6_234678(volatile A&&);
+eight sink_6_234678(const volatile A&&);
+
+int test6_234678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_234678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_234678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_234678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_234678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_234678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_234678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_6_235678(const A&);
+three sink_6_235678(volatile A&);
+five sink_6_235678( A&&);
+six sink_6_235678(const A&&);
+seven sink_6_235678(volatile A&&);
+eight sink_6_235678(const volatile A&&);
+
+int test6_235678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_235678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_235678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_235678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_235678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_235678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_235678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_6_245678(const A&);
+four sink_6_245678(const volatile A&);
+five sink_6_245678( A&&);
+six sink_6_245678(const A&&);
+seven sink_6_245678(volatile A&&);
+eight sink_6_245678(const volatile A&&);
+
+int test6_245678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_245678(a)) == 2 * sizeof(long)> t1;
+ sa<sizeof(sink_6_245678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_6_245678(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_6_245678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_245678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_245678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_245678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_245678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+three sink_6_345678(volatile A&);
+four sink_6_345678(const volatile A&);
+five sink_6_345678( A&&);
+six sink_6_345678(const A&&);
+seven sink_6_345678(volatile A&&);
+eight sink_6_345678(const volatile A&&);
+
+int test6_345678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_6_345678(a)) == 3 * sizeof(long)> t1;
+ sa<sizeof(sink_6_345678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_6_345678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_6_345678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_6_345678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_6_345678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_6_345678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_6_345678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test6_123456() + test6_123457() + test6_123458() + test6_123467() +
+ test6_123468() + test6_123478() + test6_123567() + test6_123568() +
+ test6_123578() + test6_123678() + test6_124567() + test6_124568() +
+ test6_124578() + test6_124678() + test6_125678() + test6_134567() +
+ test6_134568() + test6_134578() + test6_134678() + test6_135678() +
+ test6_145678() + test6_234567() + test6_234568() + test6_234578() +
+ test6_234678() + test6_235678() + test6_245678() + test6_345678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7n.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7n.C
new file mode 100644
index 0000000..7e7a664
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7n.C
@@ -0,0 +1,111 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {char x[1];};
+struct two {char x[2];};
+struct three {char x[3];};
+struct four {char x[4];};
+struct five {char x[5];};
+struct six {char x[6];};
+struct seven {char x[7];};
+struct eight {char x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 7 at a time
+
+one sink_7_1234567( A&); // { dg-message "one sink_7_1234567|no known conversion" }
+two sink_7_1234567(const A&); // { dg-message "note" }
+three sink_7_1234567(volatile A&); // { dg-message "note" }
+four sink_7_1234567(const volatile A&); // { dg-message "note" }
+five sink_7_1234567( A&&); // { dg-message "note" }
+six sink_7_1234567(const A&&); // { dg-message "note" }
+seven sink_7_1234567(volatile A&&); // { dg-message "note" }
+
+int test7_1234567()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_7_1234567(cv_source()); // { dg-error "no match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 47 }
+ return 0;
+}
+
+one sink_7_1235678( A&);
+two sink_7_1235678(const A&);
+three sink_7_1235678(volatile A&);
+five sink_7_1235678( A&&);
+six sink_7_1235678(const A&&);
+seven sink_7_1235678(volatile A&&);
+eight sink_7_1235678(const volatile A&&); // { dg-message "" }
+
+int test7_1235678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_7_1235678(cva); // { dg-error "lvalue" }
+ return 0;
+}
+
+two sink_7_2345678(const A&); // { dg-message "note" }
+three sink_7_2345678(volatile A&); // { dg-message "note" }
+four sink_7_2345678(const volatile A&); // { dg-message "note" }
+five sink_7_2345678( A&&); // { dg-message "note" }
+six sink_7_2345678(const A&&); // { dg-message "note" }
+seven sink_7_2345678(volatile A&&); // { dg-message "note" }
+eight sink_7_2345678(const volatile A&&); // { dg-message "note" }
+
+int test7_2345678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_7_2345678(a); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 84 }
+ return 0;
+}
+
+one sink_7_1234678( A&);
+two sink_7_1234678(const A&); // { dg-message "note" }
+three sink_7_1234678(volatile A&);
+four sink_7_1234678(const volatile A&);
+six sink_7_1234678(const A&&); // { dg-message "note" }
+seven sink_7_1234678(volatile A&&); // { dg-message "note" }
+eight sink_7_1234678(const volatile A&&); // { dg-message "note" }
+
+int test7_1234678()
+{
+ A a;
+ const A ca = a; // { dg-error "deleted" }
+ volatile A va;
+ const volatile A cva = a; // { dg-error "deleted" }
+ sink_7_1234678(source()); // { dg-error "ambiguous" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 103 }
+ return 0;
+}
+
+int main()
+{
+ return test7_2345678() + test7_1234678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7p.C
new file mode 100644
index 0000000..55fc5d7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv7p.C
@@ -0,0 +1,233 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 7 at a time
+
+one sink_7_1234567( A&);
+two sink_7_1234567(const A&);
+three sink_7_1234567(volatile A&);
+four sink_7_1234567(const volatile A&);
+five sink_7_1234567( A&&);
+six sink_7_1234567(const A&&);
+seven sink_7_1234567(volatile A&&);
+
+int test7_1234567()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1234567(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1234567(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1234567(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1234567(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_1234567(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_1234567(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1234567(v_source())) == 7 * sizeof(long)> t7;
+ return 0;
+}
+
+one sink_7_1234568( A&);
+two sink_7_1234568(const A&);
+three sink_7_1234568(volatile A&);
+four sink_7_1234568(const volatile A&);
+five sink_7_1234568( A&&);
+six sink_7_1234568(const A&&);
+eight sink_7_1234568(const volatile A&&);
+
+int test7_1234568()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1234568(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1234568(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1234568(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1234568(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_1234568(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_1234568(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1234568(v_source())) == 8 * sizeof(long)> t7;
+ sa<sizeof(sink_7_1234568(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_7_1234578( A&);
+two sink_7_1234578(const A&);
+three sink_7_1234578(volatile A&);
+four sink_7_1234578(const volatile A&);
+five sink_7_1234578( A&&);
+seven sink_7_1234578(volatile A&&);
+eight sink_7_1234578(const volatile A&&);
+
+int test7_1234578()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1234578(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1234578(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1234578(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1234578(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_1234578(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_1234578(c_source())) == 8 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1234578(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_7_1234578(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_7_1234678( A&);
+two sink_7_1234678(const A&);
+three sink_7_1234678(volatile A&);
+four sink_7_1234678(const volatile A&);
+six sink_7_1234678(const A&&);
+seven sink_7_1234678(volatile A&&);
+eight sink_7_1234678(const volatile A&&);
+
+int test7_1234678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1234678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1234678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1234678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1234678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_1234678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1234678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_7_1234678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_7_1235678( A&);
+two sink_7_1235678(const A&);
+three sink_7_1235678(volatile A&);
+five sink_7_1235678( A&&);
+six sink_7_1235678(const A&&);
+seven sink_7_1235678(volatile A&&);
+eight sink_7_1235678(const volatile A&&);
+
+int test7_1235678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1235678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1235678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1235678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1235678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_1235678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1235678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_7_1235678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_7_1245678( A&);
+two sink_7_1245678(const A&);
+four sink_7_1245678(const volatile A&);
+five sink_7_1245678( A&&);
+six sink_7_1245678(const A&&);
+seven sink_7_1245678(volatile A&&);
+eight sink_7_1245678(const volatile A&&);
+
+int test7_1245678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1245678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1245678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1245678(va)) == 4 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1245678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_1245678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_1245678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1245678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_7_1245678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+one sink_7_1345678( A&);
+three sink_7_1345678(volatile A&);
+four sink_7_1345678(const volatile A&);
+five sink_7_1345678( A&&);
+six sink_7_1345678(const A&&);
+seven sink_7_1345678(volatile A&&);
+eight sink_7_1345678(const volatile A&&);
+
+int test7_1345678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_1345678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_7_1345678(ca)) == 4 * sizeof(long)> t2;
+ sa<sizeof(sink_7_1345678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_1345678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_1345678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_1345678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_1345678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_7_1345678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+two sink_7_2345678(const A&);
+three sink_7_2345678(volatile A&);
+four sink_7_2345678(const volatile A&);
+five sink_7_2345678( A&&);
+six sink_7_2345678(const A&&);
+seven sink_7_2345678(volatile A&&);
+eight sink_7_2345678(const volatile A&&);
+
+int test7_2345678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_7_2345678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_7_2345678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_7_2345678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_7_2345678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_7_2345678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_7_2345678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_7_2345678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test7_1234567() + test7_1234568() + test7_1234578() + test7_1234678() +
+ test7_1235678() + test7_1245678() + test7_1345678() + test7_2345678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv8p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv8p.C
new file mode 100644
index 0000000..4424793
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv8p.C
@@ -0,0 +1,62 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test overload resolution among reference types
+
+// { dg-do compile { target c++11 } }
+// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } { "*" } { "" } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+struct three {long x[3];};
+struct four {long x[4];};
+struct five {long x[5];};
+struct six {long x[6];};
+struct seven {long x[7];};
+struct eight {long x[8];};
+
+struct A
+{
+ A();
+ A(const volatile A&&);
+};
+
+ A source();
+const A c_source();
+ volatile A v_source();
+const volatile A cv_source();
+
+// 8 at a time
+
+one sink_8_12345678( A&);
+two sink_8_12345678(const A&);
+three sink_8_12345678(volatile A&);
+four sink_8_12345678(const volatile A&);
+five sink_8_12345678( A&&);
+six sink_8_12345678(const A&&);
+seven sink_8_12345678(volatile A&&);
+eight sink_8_12345678(const volatile A&&);
+
+int test8_12345678()
+{
+ A a;
+ const A ca;
+ volatile A va;
+ const volatile A cva;
+ sa<sizeof(sink_8_12345678(a)) == 1 * sizeof(long)> t1;
+ sa<sizeof(sink_8_12345678(ca)) == 2 * sizeof(long)> t2;
+ sa<sizeof(sink_8_12345678(va)) == 3 * sizeof(long)> t3;
+ sa<sizeof(sink_8_12345678(cva)) == 4 * sizeof(long)> t4;
+ sa<sizeof(sink_8_12345678(source())) == 5 * sizeof(long)> t5;
+ sa<sizeof(sink_8_12345678(c_source())) == 6 * sizeof(long)> t6;
+ sa<sizeof(sink_8_12345678(v_source())) == 7 * sizeof(long)> t7;
+ sa<sizeof(sink_8_12345678(cv_source())) == 8 * sizeof(long)> t8;
+ return 0;
+}
+
+int main()
+{
+ return test8_12345678();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv9p.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv9p.C
new file mode 100644
index 0000000..a221f32
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rv9p.C
@@ -0,0 +1,21 @@
+// PR c++/36744
+// { dg-do run { target c++11 } }
+
+struct S
+{
+ S(): i(2) {}
+ S(S const&s): i(s.i) {}
+ int i;
+};
+
+void f(S x) { x.i = 0; }
+
+extern "C" void abort (void);
+int main()
+{
+ S y;
+ f(static_cast<S&&>(y));
+ if (y.i != 2)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rvo.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rvo.C
new file mode 100644
index 0000000..fc83b1b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/rvo.C
@@ -0,0 +1,24 @@
+// { dg-do run { target c++11 } }
+// Contributed by Sylvain Pion
+static int rvalue_constructions = 0;
+
+struct A {
+ A () { }
+ A (const A&) { }
+ A (A&&) { ++rvalue_constructions; }
+ ~A () { }
+};
+
+A f() { return A(); }
+
+extern "C" {
+ void abort(void);
+}
+
+int main()
+{
+ A c = f();
+
+ if (rvalue_constructions != 0)
+ abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum.C
new file mode 100644
index 0000000..0ca3a1f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum.C
@@ -0,0 +1,76 @@
+// { dg-do compile { target c++11 } }
+enum class Color1 {
+ Red,
+ Green,
+ Blue
+};
+
+enum struct Color2 {
+ Red, // { dg-message "previously declared here" }
+ Orange,
+ Yellow,
+ Green,
+ Blue,
+ Indigo = Green + 2,
+ Violet,
+ Red // { dg-error "redeclaration" }
+};
+
+enum Color {
+ Red, Green, Blue
+};
+
+enum class Color3 {
+ Red
+};
+
+enum Color color;
+enum Color3 color3;
+
+void f(int);
+void f2(Color3);
+
+void g()
+{
+ int i = 0;
+ f(color); // okay: unscoped enum
+ f(color3); // { dg-error "cannot convert" }
+ f2(color); // { dg-error "cannot convert" }
+ f2(color3);
+ f2(i); // { dg-error "cannot convert" }
+ i = color3; // { dg-error "cannot convert" }
+ color3 = i; // { dg-error "cannot convert" }
+ f(static_cast<int>(color3)); // okay
+
+ int a[5];
+ a[color3]; // { dg-error "array subscript is not an integer" }
+
+ bool b = color3; // { dg-error "cannot convert" }
+}
+
+void h()
+{
+ Color1 c1 = Color1::Red;
+ Color2 c2 = Color1::Red; // { dg-error "cannot convert" }
+ c2 = Color1::Red; // { dg-error "cannot convert" }
+
+ c2 = Color2::Red;
+ int c3 = Color::Red;
+}
+
+template<typename T, T value>
+struct constant { };
+
+template<typename T>
+int& sfinae(constant<T, T::Green>*);
+
+float& sfinae(void*);
+
+void sfinae_test()
+{
+ int& test1 = sfinae((constant<Color1, Color1::Green>*)0);
+ int& test2 = sfinae((constant<Color2, Color2::Green>*)0);
+ float& test3 = sfinae((constant<Color1, Color1::Red>*)0);
+ int& test4 = sfinae((constant<Color, Green>*)0);
+ float& test5 = sfinae((constant<Color, Red>*)0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum2.C
new file mode 100644
index 0000000..bb8ad75
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum2.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+enum class E { e = 10 };
+enum E2 { e2 = 10 };
+
+struct C {
+ int arr[E::e]; // { dg-error "non-integral type" }
+ int arr2[E2::e2]; // OK
+ int i: E::e; // { dg-error "non-integral type" }
+ int i2: E2::e2; // OK
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_98.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_98.C
new file mode 100644
index 0000000..8c24e86
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_98.C
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-std=c++98" }
+enum class E1 { e1 }; // { dg-warning "scoped enums" }
+enum E2 : char { e2 }; // { dg-warning "scoped enums" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_examples.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_examples.C
new file mode 100644
index 0000000..8dc2fa6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/scoped_enum_examples.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+enum class Col { red, yellow, green };
+
+int x = Col::red; // { dg-error "cannot convert" }
+Col y = Col::red;
+
+void f()
+{
+ if (y) { } // { dg-error "could not convert" }
+}
+
+enum direction { left='l', right='r' };
+void g() {
+ // OK
+ direction d;
+ // OK
+ d = left;
+ // OK
+ d = direction::right;
+}
+enum class altitude { high='h', low='l' };
+void h() {
+ altitude a;
+ a = high; // { dg-error "not declared in this scope" }
+ a = altitude::low;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae1.C
new file mode 100644
index 0000000..0e015d9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae1.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+template< typename T_VECTOR >
+void f(const T_VECTOR &a, decltype(a[0]) t = 0);
+template< typename T >
+void f(const T &a, decltype(a*1) t = 0);
+
+int main() {
+ int c;
+ f(c);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
new file mode 100644
index 0000000..25ef77d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
@@ -0,0 +1,18 @@
+// PR c++/48452
+// { dg-do compile { target c++11 } }
+namespace std {
+ template <class T> T&& declval();
+}
+
+template<class T, class... Args>
+decltype(T(std::declval<Args>()...), char()) f(int);
+
+template<class, class...>
+char (&f(...))[2];
+
+struct A { virtual ~A() = 0; };
+struct B {};
+
+static_assert(sizeof(f<A, int, int>(0)) != 1, "Error"); // a
+static_assert(sizeof(f<B, void, int>(0)) != 1, "Error"); // b
+static_assert(sizeof(f<void, int, int>(0)) != 1, "Error"); // c
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
new file mode 100644
index 0000000..89bd76d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
@@ -0,0 +1,57 @@
+// PR c++/48468
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+
+template<class T>
+T&& declval() noexcept;
+
+template< class T >
+inline void f1( T& x ) noexcept( noexcept( declval<T&>().foo() ) ) // { dg-error "Z" }
+{
+ x.foo();
+}
+
+template< class T,
+ bool Noexcept = noexcept( declval<T&>().foo() ) // { dg-error "no member|not convert" }
+
+>
+inline void f2( T& x ) noexcept( Noexcept )
+{
+ x.foo();
+}
+
+// a common and trivial mistake
+template< class T >
+inline void f3( T& x ) noexcept( declval<T&>().foo() ) // { dg-error "Z" }
+{
+ x.foo();
+}
+
+struct X
+{
+ void foo();
+};
+
+struct Y
+{
+ void foo() noexcept;
+};
+
+struct Z {};
+
+int main()
+{
+ X x; Y y; Z z;
+
+ static_assert( !noexcept( f1(x) ), "OK." );
+ static_assert( !noexcept( f2(x) ), "OK." );
+ // static_assert( !noexcept( f3(x) ), "shall be ill-formed(OK)." );
+
+ static_assert( noexcept( f1(y) ), "OK." );
+ static_assert( noexcept( f2(y) ), "OK." );
+ // static_assert( noexcept( f3(y) ), "shall be ill-formed(OK)." );
+
+ noexcept( f1(z) ); // { dg-message "required" }
+ static_assert( noexcept( f2(z) ), "shall be ill-formed." ); // { dg-error "no match" }
+ noexcept( f3(z) ); // { dg-message "required" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae12.C
new file mode 100644
index 0000000..22a9847
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae12.C
@@ -0,0 +1,18 @@
+// PR c++/48535
+// { dg-do compile { target c++11 } }
+
+template<class T,
+ class = decltype(T{})
+>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+struct A { virtual ~A() = 0; };
+
+static_assert(sizeof(f<A>(0)) != 1, "Error"); // (a)
+static_assert(sizeof(f<void()>(0)) != 1, "Error"); // (b)
+static_assert(sizeof(f<int&>(0)) != 1, "Error"); // (d)
+static_assert(sizeof(f<const int&>(0)) == 1, "Error"); // (e)
+static_assert(sizeof(f<int[]>(0)) != 1, "Error"); // (f)
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae13.C
new file mode 100644
index 0000000..3cff1b4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae13.C
@@ -0,0 +1,20 @@
+// PR c++/48581
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& create();
+
+template<class T,
+ class = decltype(foo(create<T>()))
+>
+auto f(int) -> char;
+
+template<class>
+auto f(...) -> char (&)[2];
+
+struct S {};
+void foo(S);
+
+static_assert(sizeof(f<S>(0)) == 1, "Error"); // (#)
+
+int main() {}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae14.C
new file mode 100644
index 0000000..14e5e05
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae14.C
@@ -0,0 +1,27 @@
+// PR c++/48557
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct add_rval_ref
+{
+ typedef T&& type;
+};
+
+template<>
+struct add_rval_ref<void>
+{
+ typedef void type;
+};
+
+template<class T>
+typename add_rval_ref<T>::type create();
+
+template<class T, class U,
+ class = decltype(create<T>() + create<U>())
+>
+char f(int);
+
+template<class, class>
+char (&f(...))[2];
+
+static_assert(sizeof(f<void, int>(0)) != 1, "Error"); // (a)
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae15.C
new file mode 100644
index 0000000..d8b3228
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae15.C
@@ -0,0 +1,12 @@
+// PR c++/48531
+// { dg-do compile { target c++11 } }
+
+template<class T,
+ class = decltype(T())
+>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+static_assert(sizeof(f<int[]>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae16.C
new file mode 100644
index 0000000..56cbdad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae16.C
@@ -0,0 +1,17 @@
+// PR c++/48531
+// { dg-do compile { target c++11 } }
+
+template<class T,
+ class = decltype(T())
+>
+char f(int);
+
+template<class>
+double f(...);
+
+struct B2 {
+ B2(...);
+};
+
+#define SA(X) static_assert ((X), #X)
+SA(sizeof(f<B2[2]>(0)) != 1);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae17.C
new file mode 100644
index 0000000..c56a5d4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae17.C
@@ -0,0 +1,31 @@
+// PR c++/48530
+// { dg-do compile { target c++11 } }
+
+template<class T,
+ class = decltype(T{})
+>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+struct DelDtor {
+ ~DelDtor() = delete;
+};
+
+static_assert(sizeof(f<DelDtor[2]>(0)) != 1, "Error");
+
+struct A
+{
+ static DelDtor *p;
+};
+
+template<class T,
+ class = decltype(delete T::p, (T*)0)
+>
+char g(int);
+
+template<class>
+char (&g(...))[2];
+
+static_assert(sizeof(g<DelDtor>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae18.C
new file mode 100644
index 0000000..ea46df0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae18.C
@@ -0,0 +1,17 @@
+// PR c++/48530
+// { dg-do compile { target c++11 } }
+
+template<class T,
+ class = decltype(T())
+>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+struct DelDtor {
+ DelDtor() = default;
+ ~DelDtor() = delete;
+};
+
+static_assert(sizeof(f<DelDtor>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae19.C
new file mode 100644
index 0000000..52cc6ad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae19.C
@@ -0,0 +1,13 @@
+// PR c++/48737
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& create();
+
+template<class T, class... Args>
+decltype(T{create<Args>()...}, char()) f(int);
+
+template<class, class...>
+char (&f(...))[2];
+
+static_assert(sizeof(f<int[1], int, int>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae2.C
new file mode 100644
index 0000000..6f617b2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae2.C
@@ -0,0 +1,39 @@
+// PR c++/44967
+// { dg-do compile { target c++11 } }
+
+template <typename T> T&& declval();
+
+template<typename T1, typename T2, typename... Args>
+struct has_construct
+{
+ typedef char one;
+ typedef struct {char _m[2]; } two;
+
+ template<typename U1, typename U2, typename... Args2>
+ static decltype(declval<U1>().construct(declval<U2*>(), declval<Args2>()...), one()) test(int);
+ template<typename, typename, typename...>
+ static two test(...);
+
+ static const bool value = sizeof(test<T1, T2, Args...>(0)) == 1;
+};
+
+
+struct A0
+{};
+
+struct A1
+{
+ void construct(int*, int);
+};
+
+template<typename _Tp>
+struct A2
+{
+ template<typename _Tp1, typename... _Args>
+ void construct(_Tp1*, _Args&&...) {}
+};
+
+#define SA(X) static_assert(X,#X)
+SA((!has_construct<A0, int, int>::value)); // ok
+SA((has_construct<A1, int, int>::value)); // bang
+SA((has_construct<A2<int>, int>::value)); // bang
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae20.C
new file mode 100644
index 0000000..882efe7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae20.C
@@ -0,0 +1,23 @@
+// PR c++/48744
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct add_rval_ref {
+ typedef T&& type;
+};
+
+template<>
+struct add_rval_ref<void> {
+ typedef void type;
+};
+
+template<class T>
+typename add_rval_ref<T>::type create();
+
+template<class T, class Arg>
+decltype(T{create<Arg>()}, char()) f(int);
+
+template<class, class>
+char (&f(...))[2];
+
+static_assert(sizeof(f<int, void>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae21.C
new file mode 100644
index 0000000..743d7cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae21.C
@@ -0,0 +1,18 @@
+// PR c++/48735
+// { dg-do compile { target c++11 } }
+
+template<class T,
+ class = decltype(T{})
+>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+struct ND {
+ // Make ND() non-aggregate.
+ virtual void f();
+ ND() = delete;
+};
+
+static_assert(sizeof(f<ND[1]>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae22.C
new file mode 100644
index 0000000..2c55b8a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae22.C
@@ -0,0 +1,23 @@
+// PR c++/48745
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct add_rval_ref {
+ typedef T&& type;
+};
+
+template<>
+struct add_rval_ref<void> {
+ typedef void type;
+};
+
+template<class T>
+typename add_rval_ref<T>::type create();
+
+template<class T, class... Args>
+decltype(T{create<Args>()...}, char()) f(int);
+
+template<class, class...>
+char (&f(...))[2];
+
+static_assert(sizeof(f<int, void>(0)) != 1, "Error"); // #
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae23.C
new file mode 100644
index 0000000..53d5c9b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae23.C
@@ -0,0 +1,28 @@
+// PR c++/48647
+// { dg-do compile { target c++11 } }
+
+template< class T >
+T&& declval();
+
+template< class T, class U >
+decltype( true ? declval<T>() : declval<U>() ) test( int );
+
+template< class T, class U >
+void test( ... );
+
+
+template< class T, class U >
+struct is_same {
+ static const bool value = false;
+};
+
+template< class T >
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+#define SA(X) static_assert ((X),#X)
+
+typedef decltype( test<int*, double*>(0) ) void_expected;
+SA ((is_same<void_expected, void>::value));
+SA ((!is_same<void_expected, void*>::value));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae24.C
new file mode 100644
index 0000000..6d275d3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae24.C
@@ -0,0 +1,29 @@
+// PR c++/49058
+// This error is not subject to SFINAE because it doesn't happen in the
+// deduction context.
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+
+template<typename T> T val();
+
+struct F1
+{
+ void operator()();
+};
+
+template<typename F>
+struct Bind
+{
+ template<typename R
+ = decltype( val<F>()( ) )>
+ R f();
+
+ template<typename R
+ = decltype( val<const F>()( ) )> // { dg-error "no match" }
+ R f() const;
+};
+
+int main()
+{
+ Bind<F1> b;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae25.C
new file mode 100644
index 0000000..0ff872c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae25.C
@@ -0,0 +1,10 @@
+// PR c++/49105
+// { dg-do compile { target c++11 } }
+
+template<class T, class = decltype(T{})>
+char f(int);
+
+template<class T>
+auto f(...) -> char(&)[2];
+
+static_assert(sizeof(f<const int&&>(0)) == 1, "Error"); // #
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
new file mode 100644
index 0000000..f55e1d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
@@ -0,0 +1,38 @@
+// PR c++/49229
+// { dg-do compile { target c++11 } }
+
+extern void* enabler;
+
+template<bool, class = void>
+struct enable_if {};
+
+template<class T>
+struct enable_if<true, T> {
+ typedef T type;
+};
+
+template<class... Bn>
+struct and_;
+
+template<class B1>
+struct and_<B1> : B1 {};
+
+template<class, class>
+struct is_same {
+ static constexpr bool value = false;
+};
+
+template<class T>
+struct is_same<T, T> {
+ static constexpr bool value = true;
+};
+
+template<class... T>
+struct S {
+ template<class... U,
+ typename enable_if<and_<is_same<T, U>...>::value>::type*& = enabler // { dg-error "no type" }
+ >
+ S(U...){}
+};
+
+S<bool> s(0); // { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae27.C
new file mode 100644
index 0000000..ddd484a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae27.C
@@ -0,0 +1,20 @@
+// PR c++/50157
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T val();
+
+template<class T, class Arg, class =
+ decltype(::new T(val<Arg>()))
+>
+auto test(int) -> char;
+
+template<class, class>
+auto test(...) -> char (&)[2];
+
+struct P {
+ explicit operator bool(); // (#13)
+};
+
+typedef decltype(test<bool, P>(0)) type; // OK
+typedef decltype(test<float, P>(0)) type2; // Error (#17)
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae28.C
new file mode 100644
index 0000000..1eeba64
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae28.C
@@ -0,0 +1,16 @@
+// PR c++/50324
+// { dg-do compile { target c++11 } }
+
+struct complete { };
+struct incomplete;
+
+template<class T> auto f(T *) -> decltype(T{}) *;
+template<class T> char f(T);
+
+int main()
+{
+ complete *p = 0;
+ static_assert(sizeof(f(p)) == sizeof(void*), "");
+ incomplete *q = 0;
+ static_assert(sizeof(f(q)) == 1u, "");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae29.C
new file mode 100644
index 0000000..8792778
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae29.C
@@ -0,0 +1,17 @@
+// PR c++/51047
+// { dg-do compile { target c++11 } }
+
+template<typename T> T &&declval();
+template<class T> decltype(declval<T>().x) f(T *);
+template<class T> char f(T);
+struct B1{ int x; };
+struct B2{ int x; };
+struct D : public B1, B2{};
+struct S { int x; };
+int main()
+{
+ S *p = nullptr;
+ static_assert(sizeof(f(p)) == sizeof(int), "");
+ D *q = nullptr;
+ static_assert(sizeof(f(q)) == 1u, "");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae3.C
new file mode 100644
index 0000000..5009c84
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae3.C
@@ -0,0 +1,56 @@
+// { dg-do compile { target c++11 } }
+
+namespace std { template <class T> T&& declval(); }
+
+template<typename _Tp, typename... _Args>
+ class is_constructible_mini
+ {
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1, typename... _Args1>
+ static decltype(::new _Tp1(std::declval<_Args1>()...), __one())
+ __test(int);
+
+ template<typename, typename...>
+ static __two __test(...);
+
+ public:
+ static const bool value = sizeof(__test<_Tp, _Args...>(0)) == 1;
+ };
+
+/*
+template<typename _Tp>
+ class is_constructible_mini<_Tp>
+ {
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1>
+ static decltype(::new _Tp1, __one()) __test(int);
+
+ template<typename>
+ static __two __test(...);
+
+ public:
+ static const bool value
+ = sizeof(__test<typename std::remove_cv<_Tp>::type>(0)) == 1;
+ };
+*/
+
+struct A
+{
+ A(int);
+};
+
+struct B { };
+
+static_assert( is_constructible_mini<A, int>::value, "");
+static_assert( is_constructible_mini<A, A>::value, "");
+static_assert( !is_constructible_mini<A, int, double>::value, "");
+
+static_assert( !is_constructible_mini<A>::value, ""); // doesn't compile without the
+ // partial specialization
+
+static_assert( is_constructible_mini<B>::value, "");
+static_assert( is_constructible_mini<const B>::value, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae30.C
new file mode 100644
index 0000000..6fcf5f7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae30.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+
+template <class... T> struct tuple;
+template <class T> struct tuple<T> { T t; };
+
+template <class T, class U> struct pair;
+template<> struct pair<int,double> { };
+
+template <class... Ts>
+struct A
+{
+ template <class... Us,
+ class V = tuple<pair<Ts,Us>...> >
+ static void f(Us...)
+ {
+ V v;
+ }
+ template <class U>
+ static void f(bool);
+};
+
+int main()
+{
+ A<int,float>::f<double>(1.0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae31.C
new file mode 100644
index 0000000..8695ebc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae31.C
@@ -0,0 +1,13 @@
+// PR c++/51973
+// { dg-do compile { target c++11 } }
+
+template <class T>
+void f(T t) { }
+
+template <class T> decltype(f<T>(0)) g();
+template <class T> decltype(f<T*>(0)) g();
+
+int main()
+{
+ g<void>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae32.C
new file mode 100644
index 0000000..97945c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae32.C
@@ -0,0 +1,18 @@
+// PR c++/51989
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct is_container
+{
+ template <typename U, typename V = decltype(((U*)0)->begin())>
+ static char test(U* u);
+
+ template <typename U> static long test(...);
+
+ enum { value = sizeof test<T>(0) == 1 };
+};
+
+int main()
+{
+ return is_container<void>::value;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae33.C
new file mode 100644
index 0000000..f543c1f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae33.C
@@ -0,0 +1,27 @@
+// PR c++/52422
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct add_rval_ref
+{
+ typedef T&& type;
+};
+
+template<>
+struct add_rval_ref<void>
+{
+ typedef void type;
+};
+
+template<class T>
+typename add_rval_ref<T>::type create();
+
+template<class T,
+ class = decltype(create<T>()())
+>
+auto f(int) -> char(&)[1];
+
+template<class>
+auto f(...) -> char(&)[2];
+
+static_assert(sizeof(f<void>(0)) != 1, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae34.C
new file mode 100644
index 0000000..615a2bc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae34.C
@@ -0,0 +1,27 @@
+// PR c++/52422
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct add_rval_ref
+{
+ typedef T&& type;
+};
+
+template<>
+struct add_rval_ref<void>
+{
+ typedef void type;
+};
+
+template<class T>
+typename add_rval_ref<T>::type create();
+
+template<class T, class U,
+ class = decltype( (create<T>().*create<U>())() )
+>
+auto f(int) -> char(&)[1];
+
+template<class, class>
+auto f(...) -> char(&)[2];
+
+static_assert(sizeof(f<void, void>(0)) != 1, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae35.C
new file mode 100644
index 0000000..86b6103
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae35.C
@@ -0,0 +1,13 @@
+// PR c++/52363
+// { dg-do compile { target c++11 } }
+
+#include <type_traits>
+
+struct proxy
+{
+ void operator=(int const&);
+ void operator=(int&&) const;
+};
+
+static_assert( !std::is_assignable<proxy, int>::value, "" );
+static_assert( std::is_assignable<const proxy, int>::value, "" );
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae36.C
new file mode 100644
index 0000000..6597bc3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae36.C
@@ -0,0 +1,14 @@
+// PR c++/52363
+// { dg-do compile { target c++11 } }
+// { dg-options "-pedantic" }
+
+#include <type_traits>
+
+struct proxy
+{
+ void operator=(int const&);
+ void operator=(int&&) const;
+};
+
+static_assert( !std::is_assignable<proxy, int>::value, "" );
+static_assert( std::is_assignable<const proxy, int>::value, "" );
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae37.C
new file mode 100644
index 0000000..e89106a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae37.C
@@ -0,0 +1,36 @@
+// PR c++/51213
+// { dg-do compile { target c++11 } }
+
+class C {
+ typedef int type;
+};
+
+template<int>
+struct I;
+
+template<>
+struct I<2> { };
+
+template<class T, class = typename T::type>
+auto f(int) -> char;
+
+template<class>
+auto f(...) -> char (&)[2];
+
+static_assert(sizeof(f<C>(0)) == 2, "Ouch");
+
+typedef int testf[sizeof(f<C>(0)) == 2 ? 1 : -1];
+
+I<sizeof(f<C>(0))> vf;
+
+template<class T>
+auto g(int) -> decltype(typename T::type(), char());
+
+template<class>
+auto g(...) -> char (&)[2];
+
+static_assert(sizeof(g<C>(0)) == 2, "Ouch");
+
+typedef int testg[sizeof(g<C>(0)) == 2 ? 1 : -1];
+
+I<sizeof(g<C>(0))> vg;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae38.C
new file mode 100644
index 0000000..2e860ee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae38.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+template<class T, unsigned = sizeof(T)>
+auto f(int) -> char;
+
+template<class>
+auto f(...) -> char(&)[2];
+
+static_assert(sizeof(f<void>(0)) != 1, "");
+static_assert(sizeof(f<void()>(0)) != 1, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae39.C
new file mode 100644
index 0000000..8183bda
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae39.C
@@ -0,0 +1,146 @@
+// PR c++/54191
+// { dg-do compile { target c++11 } }
+
+struct B
+{};
+
+struct D
+ : private B
+{};
+
+template<typename T>
+T &&declval();
+
+
+template<typename From, typename = decltype(B{declval<From>()})>
+constexpr bool test_braced_cast_to_base(int)
+{ return true; }
+
+template<typename>
+constexpr bool test_braced_cast_to_base(bool)
+{ return false; }
+
+static_assert(!test_braced_cast_to_base<D>(0), "");
+
+
+template<typename From, typename = decltype(D{declval<From>()})>
+constexpr bool test_braced_cast_to_derived(int)
+{ return true; }
+
+template<typename>
+constexpr bool test_braced_cast_to_derived(bool)
+{ return false; }
+
+static_assert(!test_braced_cast_to_derived<B>(0), "");
+
+
+typedef B *PB;
+
+template<typename From, typename = decltype(PB{declval<From>()})>
+constexpr bool test_braced_cast_to_ptr_to_base(int)
+{ return true; }
+
+template<typename>
+constexpr bool test_braced_cast_to_ptr_to_base(bool)
+{ return false; }
+
+static_assert(!test_braced_cast_to_ptr_to_base<D *>(0), "");
+
+
+typedef D *PD;
+
+template<typename From, typename = decltype(PD{declval<From>()})>
+constexpr bool test_braced_cast_to_ptr_to_derived(int)
+{ return true; }
+
+template<typename>
+constexpr bool test_braced_cast_to_ptr_to_derived(bool)
+{ return false; }
+
+static_assert(!test_braced_cast_to_ptr_to_derived<B *>(0), "");
+
+
+template<typename From, typename To,
+ typename = decltype(static_cast<To>(declval<From>()))>
+constexpr bool test_static_cast(int)
+{ return true; }
+
+template<typename, typename>
+constexpr bool test_static_cast(bool)
+{ return false; }
+
+static_assert(!test_static_cast<B &, D &>(0), "");
+static_assert(!test_static_cast<B *, D *>(0), "");
+
+
+template<typename From, typename To,
+ typename = decltype(dynamic_cast<To>(declval<From>()))>
+constexpr bool test_dynamic_cast(int)
+{ return true; }
+
+template<typename, typename>
+constexpr bool test_dynamic_cast(bool)
+{ return false; }
+
+static_assert(!test_dynamic_cast<D &, B &>(0), "");
+static_assert(!test_dynamic_cast<D *, B *>(0), "");
+
+
+int B::*pm = 0;
+
+template<typename T, typename = decltype(declval<T>().*pm)>
+constexpr bool test_member_ptr_dot(int)
+{ return true; }
+
+template<typename>
+constexpr bool test_member_ptr_dot(bool)
+{ return false; }
+
+static_assert(!test_member_ptr_dot<D>(0), "");
+
+
+template<typename T, typename = decltype(declval<T>()->*pm)>
+constexpr bool test_member_ptr_arrow(int)
+{ return true; }
+
+template<typename>
+constexpr bool test_member_ptr_arrow(bool)
+{ return false; }
+
+static_assert(!test_member_ptr_arrow<D *>(0), "");
+
+
+template<typename T, typename U,
+ typename = decltype(declval<T>() < declval<U>())>
+constexpr bool test_rel_op(int)
+{ return true; }
+
+template<typename, typename>
+constexpr bool test_rel_op(bool)
+{ return false; }
+
+static_assert(!test_rel_op<D *, B *>(0), "");
+
+
+template<typename T, typename U,
+ typename = decltype(declval<T>() == declval<U>())>
+constexpr bool test_eq(int)
+{ return true; }
+
+template<typename, typename>
+constexpr bool test_eq(bool)
+{ return false; }
+
+static_assert(!test_eq<D *, B *>(0), "");
+
+
+template<typename T, typename U,
+ typename = decltype(false ? declval<T>() : declval<U>())>
+constexpr bool test_cond_op(int)
+{ return true; }
+
+template<typename, typename>
+constexpr bool test_cond_op(bool)
+{ return false; }
+
+static_assert(!test_cond_op<B *, D *>(0), "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae4.C
new file mode 100644
index 0000000..1b24966
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae4.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+
+namespace std { template <class T> T&& declval(); }
+
+template<typename _Tp, typename... _Args>
+ class is_constructible_mini
+ {
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1, typename... _Args1>
+ static decltype(::new _Tp1(std::declval<_Args1>()...), __one())
+ __test(int);
+
+ template<typename, typename...>
+ static __two __test(...);
+
+ public:
+ static const bool value = sizeof(__test<_Tp, _Args...>(0)) == 1;
+ };
+
+static_assert( !is_constructible_mini<int[], int>::value, "");
+static_assert( !is_constructible_mini<void, int>::value, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae40.C
new file mode 100644
index 0000000..18e5fec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae40.C
@@ -0,0 +1,21 @@
+// PR c++/54541
+// { dg-do compile { target c++11 } }
+
+template <typename T> T&& declval();
+
+struct X;
+
+X f(int);
+
+template <class T>
+void g(decltype((void)f(declval<T>())) *)
+{}
+
+template <class T>
+void g(...)
+{}
+
+int main()
+{
+ g<int>(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae41.C
new file mode 100644
index 0000000..bd6f624
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae41.C
@@ -0,0 +1,17 @@
+// PR c++/54542
+// { dg-do compile { target c++11 } }
+
+template <class T>
+void f(decltype(new T(1, 2)) *)
+{
+ T(1, 2);
+}
+
+template <class T>
+void f(...)
+{}
+
+int main()
+{
+ f<int>(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae42.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae42.C
new file mode 100644
index 0000000..a7a23a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae42.C
@@ -0,0 +1,46 @@
+// PR c++/54738
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& declval();
+
+template<class F, class T1, class... Ts>
+decltype(((*declval<T1>()).*declval<F>())(declval<Ts>()...))
+test1(int);
+
+template<class...>
+void test1(...);
+
+template<class F, class T1, class... Ts>
+decltype((declval<T1>().*declval<F>())(declval<Ts>()...))
+test2(int);
+
+template<class...>
+void test2(...);
+
+struct S {};
+
+typedef void (S::*Func)(int) const;
+typedef void (S::*Func2)(int);
+
+typedef decltype(test1<Func, S*>(0)) type1a;
+typedef decltype(test1<Func, S*&>(0)) type1b;
+typedef decltype(test1<Func, S*, int, int>(0)) type1c;
+typedef decltype(test1<Func, S*&, int, int>(0)) type1d;
+
+typedef decltype(test2<Func, S>(0)) type2a;
+typedef decltype(test2<Func, S&>(0)) type2b;
+typedef decltype(test2<Func, S, int, int>(0)) type2c;
+typedef decltype(test2<Func, S&, int, int>(0)) type2d;
+
+typedef decltype(test1<Func, S*, S>(0)) type3a;
+typedef decltype(test1<Func, S*&, S>(0)) type3b;
+
+typedef decltype(test2<Func, S, S>(0)) type4a;
+typedef decltype(test2<Func, S&, S>(0)) type4b;
+
+typedef decltype(test1<Func2, const S*, int>(0)) type5a;
+typedef decltype(test1<Func2, const S*&, int>(0)) type5b;
+
+typedef decltype(test2<Func2, const S, int>(0)) type6a;
+typedef decltype(test2<Func2, const S&, int>(0)) type6b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae43.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae43.C
new file mode 100644
index 0000000..14c31f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae43.C
@@ -0,0 +1,31 @@
+// PR c++/56208
+// { dg-do compile { target c++11 } }
+
+struct ostream {
+ ostream& operator<<(int);
+};
+
+struct sfinae_base {
+
+ typedef char one;
+ typedef char (&two)[2];
+
+ template<class T>
+ static T make();
+
+ template<unsigned> struct ok { typedef int type; };
+
+ template<class U, class T>
+ static one test(decltype((make<U>() << make<T>()), 0));
+
+ template<class, class>
+ static two test(...);
+};
+
+template<class T>
+struct is_printable : private sfinae_base
+{
+ enum { value = sizeof(test<ostream&, T>(0)) == sizeof(one) };
+};
+
+typedef int ok[is_printable<int>::value ? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae44.C
new file mode 100644
index 0000000..bbcae62
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae44.C
@@ -0,0 +1,26 @@
+// PR c++/56913
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+T &&declval();
+
+template<typename T, typename U,
+ typename = decltype((declval<T>().*declval<U>())())>
+constexpr bool test(int)
+{
+ return true;
+}
+
+template<typename T, typename U>
+constexpr bool test(...)
+{
+ return false;
+}
+
+struct S
+{};
+
+static_assert(!test<S, void (S::*)() &>(0), "");
+static_assert(test<S, void (S::*)() &&>(0), "");
+static_assert(test<S &, void (S::*)() &>(0), "");
+static_assert(!test<S &, void (S::*)() &&>(0), "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae45.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae45.C
new file mode 100644
index 0000000..bd37514
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae45.C
@@ -0,0 +1,35 @@
+// PR c++/56970
+// { dg-do compile { target c++11 } }
+
+template <typename T>
+struct has
+{
+ template <typename>
+ constexpr static int test(...) {
+ return 0;
+ }
+
+ template <typename C>
+ constexpr static int test(decltype(sizeof(C::x))) { // Doesn't compile.
+ return 1; // Is a member variable.
+ }
+
+ template <typename C, int c = sizeof(decltype(((C*)nullptr)->x()))>
+ constexpr static int test(int) {
+ return 2; // Is a member function.
+ }
+
+ static const int value = test<T>(0);
+};
+
+struct foo {
+ int x;
+};
+
+struct bar {
+ int x();
+};
+
+static_assert(has<int>::value == 0, "");
+static_assert(has<foo>::value == 1, "");
+static_assert(has<bar>::value == 2, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae46.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae46.C
new file mode 100644
index 0000000..20e859c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae46.C
@@ -0,0 +1,13 @@
+// PR c++/57419
+// { dg-do compile { target c++11 } }
+
+template< typename q >
+decltype( &q::f ) t( q ) {}
+
+char t( ... ) { return {}; }
+
+class c { void f() = delete; };
+class d { static void f() = delete; };
+
+static_assert( sizeof( t( c() ) ), "c" );
+static_assert( sizeof( t( d() ) ), "d" );
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae47.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae47.C
new file mode 100644
index 0000000..1058a28
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae47.C
@@ -0,0 +1,25 @@
+// Source: Comment 16 of PR51213
+// { dg-do compile { target c++11 } }
+
+template <class T>
+T && declval();
+
+template <class T>
+constexpr auto hasSize(int) -> decltype(declval<T&>().size(), bool())
+{ return true; }
+
+template <class T>
+constexpr bool hasSize(...)
+{ return false; }
+
+struct A
+{
+ int size();
+};
+
+struct B : private A
+{
+};
+
+static_assert(hasSize<A>(0), "A");
+static_assert(!hasSize<B>(0), "B");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae48.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae48.C
new file mode 100644
index 0000000..ba728d9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae48.C
@@ -0,0 +1,21 @@
+// PR c++/57874
+// { dg-do compile { target c++11 } }
+
+namespace NX
+{
+ struct X {};
+ void foo(X) {}
+}
+
+namespace NY
+{
+ struct Y {};
+}
+
+template<class T>
+auto ADLfoo(T&&) -> decltype((foo(T{}), short()));
+
+char ADLfoo(...);
+
+static_assert(sizeof(ADLfoo(NY::Y{})) == 1, "");
+static_assert(sizeof(ADLfoo(NX::X{})) == 2, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae49.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae49.C
new file mode 100644
index 0000000..59381f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae49.C
@@ -0,0 +1,29 @@
+// PR c++/58932
+// { dg-do compile { target c++11 } }
+
+using nullptr_t = decltype(nullptr);
+
+template<typename T, typename Sfinae = nullptr_t>
+struct B {
+ static float& int_if_addable();
+};
+
+template<typename T>
+struct B<T, decltype( (T() + T()), nullptr )> {
+ static int& int_if_addable();
+};
+
+struct X { };
+
+struct Y { };
+Y operator+(Y, Y);
+
+struct Z { };
+Z operator+(Z, Z) = delete;
+
+int main()
+{
+ float& a = B<X>::int_if_addable();
+ int& b = B<Y>::int_if_addable();
+ float& c = B<Z>::int_if_addable();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae5.C
new file mode 100644
index 0000000..421a06e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae5.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& create();
+
+template <class T, class U,
+ class = decltype(create<T>() = create<U>())
+ >
+char test(int);
+
+template <class, class>
+double test(...);
+
+int main() {
+ test<int[], int[]>(0); // #1
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae6.C
new file mode 100644
index 0000000..4ee0146
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae6.C
@@ -0,0 +1,31 @@
+// PR c++/48113
+// { dg-do compile { target c++11 } }
+
+template<typename T> T declval();
+
+struct tuple { };
+
+struct F1
+{
+ void operator()(tuple, int);
+};
+
+typedef void (*F2)(tuple, int);
+
+template<typename F, typename T>
+struct Bind
+{
+ template<typename A,
+ typename R = decltype( F()(declval<T&>(), A()) )>
+ R f(A);
+
+ template<typename A,
+ typename R = decltype( F()(declval<volatile T&>(), A()) )>
+ R f(A) volatile;
+};
+
+int main()
+{
+ Bind<F1, tuple>().f(0); // OK
+ Bind<F2, tuple>().f(0); // ERROR, should be OK
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae7.C
new file mode 100644
index 0000000..18b3d8f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae7.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ void f();
+ void f(int);
+ typedef int g;
+};
+
+template <class T> decltype (T::f) f();
+template <class T> void f();
+
+template <class T> decltype (T::g) g();
+template <class T> void g();
+
+int main()
+{
+ f<A>();
+ g<A>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae8.C
new file mode 100644
index 0000000..43381d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae8.C
@@ -0,0 +1,14 @@
+// PR c++/48449
+// { dg-do compile { target c++11 } }
+
+template<class T, class = decltype(T())>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+struct A { virtual ~A() = 0; };
+
+static_assert(sizeof(f<int&>(0)) != 1, "Error");
+static_assert(sizeof(f<void()>(0)) != 1, "Error");
+static_assert(sizeof(f<A>(0)) != 1, "Error");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae9.C
new file mode 100644
index 0000000..68656c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/sfinae9.C
@@ -0,0 +1,24 @@
+// PR c++/48450
+// { dg-do compile { target c++11 } }
+
+namespace std {
+ template <class T> T&& declval();
+}
+
+template<class To, class From,
+ class = decltype(static_cast<To>(std::declval<From>()))
+>
+char f(int);
+
+template<class, class>
+char (&f(...))[2];
+
+struct A { virtual ~A() = 0; };
+struct B {};
+struct D : B {};
+
+static_assert(sizeof(f<A, int>(0)) != 1, "Error"); // a
+static_assert(sizeof(f<int*, const void*>(0)) != 1, "Error"); // b
+static_assert(sizeof(f<D*, const B*>(0)) != 1, "Error"); // c
+static_assert(sizeof(f<int B::*, const int D::*>(0)) != 1, "Error"); // d
+static_assert(sizeof(f<B, void>(0)) != 1, "Error"); // e
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert1.C
new file mode 100644
index 0000000..49b5a97
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert1.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+void foo()
+{
+ static_assert(1, "okay");
+ static_assert (0 == 1, "zero is never equal to one"); // { dg-error "never equal" }
+}
+
+class X {
+ static_assert(1, "okay");
+ static_assert (0 == 1, "zero is never equal to one"); // { dg-error "never equal" }
+};
+
+static_assert(1, "okay");
+static_assert (0 == 1, "zero is never equal to one"); // { dg-error "never equal" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert10.C
new file mode 100644
index 0000000..216f259
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert10.C
@@ -0,0 +1,8 @@
+// PR c++/60254
+// { dg-do compile { target c++11 } }
+
+template<typename T> bool foo(T)
+{
+ int i;
+ static_assert(foo(i), "Error"); // { dg-error "non-constant condition|not usable" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert11.C
new file mode 100644
index 0000000..8a7362d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert11.C
@@ -0,0 +1,10 @@
+// PR c++/60254
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ template<typename T> bool foo(T)
+ {
+ static_assert(foo(0), "Error"); // { dg-error "non-constant condition|constant expression" }
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert2.C
new file mode 100644
index 0000000..1ef2bc6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert2.C
@@ -0,0 +1,35 @@
+// { dg-do compile { target c++11 } }
+template<int I>
+struct accept_evens {
+ static_assert( I % 2 == 0, "I must be an even number"); // { dg-error "even number" }
+};
+
+template<int I>
+struct accept_evens_ok {
+ static_assert( I % 2 == 0, "I must be an even number");
+};
+
+template<int I>
+void accept_odds() {
+ static_assert( I % 2 == 1, "I must be an odd number"); // { dg-error "odd number" }
+}
+
+template<int I>
+void accept_odds_ok() {
+ static_assert( I % 2 == 1, "I must be an odd number");
+}
+
+void f()
+{
+ accept_odds<1>();
+ accept_odds<2>();
+ accept_odds<3>();
+ accept_odds_ok<5>();
+ accept_odds_ok<7>();
+}
+
+accept_evens<0> ok0;
+accept_evens<1> error1;
+accept_evens<2> ok2;
+accept_evens_ok<4> ok4;
+accept_evens_ok<6> ok6;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert3.C
new file mode 100644
index 0000000..addde13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert3.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+static_assert(7 / 0, "X"); // { dg-error "non-constant condition" "non-constant" }
+// { dg-warning "division by zero" "zero" { target *-*-* } 2 }
+// { dg-error "division by zero is not a constant-expression" "not a constant" { target *-*-* } 2 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert4.C
new file mode 100644
index 0000000..9a74735
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert4.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "--param ggc-min-heapsize=0 --param ggc-min-expand=0 " }
+// PR C++/30033
+// Make sure that the static assert does not crash the GC.
+
+template <class T>
+struct default_delete
+{
+ void
+ operator() (T * ptr) const
+ {
+ static_assert (sizeof (T) > 0, "Can't delete pointer to incomplete type");
+ }
+};
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert5.C
new file mode 100644
index 0000000..36cf2eb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert5.C
@@ -0,0 +1,21 @@
+// PR c++/50837
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct z
+{
+ static constexpr bool test_constexpr()
+ {
+ return true;
+ }
+
+ static void test()
+ {
+ static_assert(test_constexpr(), "test1");
+ }
+};
+
+int main()
+{
+ z<int>::test();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert6.C
new file mode 100644
index 0000000..5323e71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert6.C
@@ -0,0 +1,4 @@
+// PR c++/51397
+// { dg-do compile { target c++11 } }
+
+static_assert('X' != '\130', "'X' has the wrong value"); // { dg-error "'X' has the wrong value" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert7.C
new file mode 100644
index 0000000..f571de2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert7.C
@@ -0,0 +1,21 @@
+// PR c++/53166
+// { dg-do compile { target c++11 } }
+// { dg-options "-Waddress" }
+
+template <typename X, X a>
+struct A
+{
+ static_assert (a != nullptr, "oops");
+ static_assert (nullptr != a, "oops");
+
+ int f()
+ {
+ static_assert (a != nullptr, "oops");
+ static_assert (nullptr != a, "oops");
+ return 1;
+ }
+};
+
+int i1;
+A<int*, &i1> a1;
+int i2 = a1.f();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert8.C
new file mode 100644
index 0000000..ea23afb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert8.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+static_assert (1 == 0); // { dg-error "expected (string-literal|',') before" }
+
+static_assert (1 == 0,); // { dg-error "expected string-literal before '\\)'" }
+
+static_assert (1 == 0, "oops"); // { dg-error "static assertion failed" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
new file mode 100644
index 0000000..fccaa44
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
@@ -0,0 +1,7 @@
+// PR c++/58837
+// { dg-require-effective-target c++11 }
+
+void f();
+static_assert(f, "");
+struct A {};
+static_assert(A::~A, ""); // { dg-error "non-static member function" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std-layout1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std-layout1.C
new file mode 100644
index 0000000..09273c5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std-layout1.C
@@ -0,0 +1,91 @@
+// { dg-do compile { target c++11 } }
+
+// [basic.types]/10:
+// Scalar types, standard-layout class types (Clause 9), arrays of such
+// types and cv-qualified versions of these types (3.9.3) are collectively
+// called standard-layout types.
+
+// [class]/7:
+// A standard-layout class is a class that:
+// * has no non-static data members of type non-standard-layout class (or
+// array of such types) or reference,
+// * has no virtual functions (10.3) and no virtual base classes (10.1),
+// * has the same access control (Clause 11) for all non-static data members,
+// * has no non-standard-layout base classes,
+// * either has no non-static data members in the most-derived class and at
+// most one base class with non-static data members, or has no base classes
+// with non-static data members, and
+// * has no base classes of the same type as the first non-static data member.
+
+#include <type_traits>
+
+#define TRY(expr) static_assert (expr, #expr)
+#define YES(type) TRY(std::is_standard_layout<type>::value); \
+ TRY(std::is_standard_layout<type[]>::value); \
+ TRY(std::is_standard_layout<const volatile type>::value)
+#define NO(type) TRY(!std::is_standard_layout<type>::value); \
+ TRY(!std::is_standard_layout<type[]>::value); \
+ TRY(!std::is_standard_layout<const volatile type>::value)
+#define NONPOD(type) TRY(!std::is_pod<type>::value); \
+ TRY(!std::is_pod<type[]>::value); \
+ TRY(!std::is_pod<const volatile type>::value)
+
+struct A;
+
+YES(int);
+YES(__complex int);
+YES(void *);
+YES(int A::*);
+typedef int (A::*pmf)();
+YES(pmf);
+
+struct A { ~A(); };
+YES(A);
+NONPOD(A);
+struct F: public A { int i; };
+YES(F);
+NONPOD(F);
+struct G: public A { A a; };
+NO(G);
+struct M { A a; };
+YES(M);
+
+class B
+{
+ int i;
+ __complex int c;
+ void *p;
+ double ar[4];
+ int A::* pm;
+ int (A::*pmf)();
+};
+YES(B);
+struct D: public B { };
+YES(D);
+struct E: public B { int q; };
+NO(E);
+struct D2: public B { };
+YES(D2);
+struct I: public D, public D2 { };
+NO(I);
+
+struct C
+{
+ int i;
+private:
+ int j;
+};
+NO(C);
+struct H: public C { };
+NO(H);
+struct N { C c; };
+NO(N);
+
+struct J { virtual void f(); };
+struct J2: J { };
+NO(J);
+NO(J2);
+struct K { };
+struct L: virtual K {};
+YES(K);
+NO(L);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fext-numeric-literals.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fext-numeric-literals.C
new file mode 100644
index 0000000..7caaa7c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fext-numeric-literals.C
@@ -0,0 +1,115 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-fext-numeric-literals" }
+
+// Integer imaginary...
+
+constexpr unsigned long long
+operator"" i(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 0; }
+
+constexpr unsigned long long
+operator"" I(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 1; }
+
+constexpr unsigned long long
+operator"" j(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 2; }
+
+constexpr unsigned long long
+operator"" J(unsigned long long n) // { dg-warning "shadowed by implementation" }
+{ return 4 * n + 3; }
+
+// Floating-point imaginary...
+
+constexpr long double
+operator"" i(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 0.0L; }
+
+constexpr long double
+operator"" I(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 1.0L; }
+
+constexpr long double
+operator"" j(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 2.0L; }
+
+constexpr long double
+operator"" J(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4.0L * n + 3.0L; }
+
+// Fixed-point...
+
+constexpr long double
+operator"" k(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 0; }
+
+constexpr long double
+operator"" K(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 1; }
+
+constexpr long double
+operator"" r(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 2; }
+
+constexpr long double
+operator"" R(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 1) + 3; }
+
+// Machine-defined...
+
+constexpr long double
+operator"" w(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 0; }
+
+constexpr long double
+operator"" W(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 1; }
+
+constexpr long double
+operator"" q(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 2; }
+
+constexpr long double
+operator"" Q(long double n) // { dg-warning "shadowed by implementation" }
+{ return 4 * (n + 2) + 3; }
+
+int
+main()
+{
+ auto ii = 1i;
+ auto Ii = 1I;
+ auto ji = 1j;
+ auto Ji = 1J;
+
+ auto ifp = 1.0i;
+ auto Ifp = 1.0I;
+ auto jfp = 1.0j;
+ auto Jfp = 1.0J;
+
+ auto kfp = 1.0k; // { dg-error "fixed-point types not supported" }
+ auto Kfp = 1.0K; // { dg-error "fixed-point types not supported" }
+ auto rfp = 1.0r; // { dg-error "fixed-point types not supported" }
+ auto Rfp = 1.0R; // { dg-error "fixed-point types not supported" }
+
+ auto wfp = 1.0w; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+ auto Wfp = 1.0W; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+ auto qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
+ auto Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
+}
+
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 7 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 11 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 15 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 19 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 25 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 29 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 33 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 37 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 43 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 47 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 51 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 55 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 61 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 65 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 69 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 73 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fno-ext-numeric-literals.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fno-ext-numeric-literals.C
new file mode 100644
index 0000000..0b245f4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/std_fno-ext-numeric-literals.C
@@ -0,0 +1,115 @@
+// { dg-do compile { target c++11 } }
+
+
+// Integer imaginary...
+
+constexpr unsigned long long
+operator"" i(unsigned long long n)
+{ return 4 * n + 0; }
+
+constexpr unsigned long long
+operator"" I(unsigned long long n)
+{ return 4 * n + 1; }
+
+constexpr unsigned long long
+operator"" j(unsigned long long n)
+{ return 4 * n + 2; }
+
+constexpr unsigned long long
+operator"" J(unsigned long long n)
+{ return 4 * n + 3; }
+
+// Floating-point imaginary...
+
+constexpr long double
+operator"" i(long double n)
+{ return 4.0L * n + 0.0L; }
+
+constexpr long double
+operator"" I(long double n)
+{ return 4.0L * n + 1.0L; }
+
+constexpr long double
+operator"" j(long double n)
+{ return 4.0L * n + 2.0L; }
+
+constexpr long double
+operator"" J(long double n)
+{ return 4.0L * n + 3.0L; }
+
+// Fixed-point...
+
+constexpr long double
+operator"" k(long double n)
+{ return 4 * (n + 1) + 0; }
+
+constexpr long double
+operator"" K(long double n)
+{ return 4 * (n + 1) + 1; }
+
+constexpr long double
+operator"" r(long double n)
+{ return 4 * (n + 1) + 2; }
+
+constexpr long double
+operator"" R(long double n)
+{ return 4 * (n + 1) + 3; }
+
+// Machine-defined...
+
+constexpr long double
+operator"" w(long double n)
+{ return 4 * (n + 2) + 0; }
+
+constexpr long double
+operator"" W(long double n)
+{ return 4 * (n + 2) + 1; }
+
+constexpr long double
+operator"" q(long double n)
+{ return 4 * (n + 2) + 2; }
+
+constexpr long double
+operator"" Q(long double n)
+{ return 4 * (n + 2) + 3; }
+
+int
+main()
+{
+ auto ii = 1i;
+ auto Ii = 1I;
+ auto ji = 1j;
+ auto Ji = 1J;
+
+ auto ifp = 1.0i;
+ auto Ifp = 1.0I;
+ auto jfp = 1.0j;
+ auto Jfp = 1.0J;
+
+ auto kfp = 1.0k;
+ auto Kfp = 1.0K;
+ auto rfp = 1.0r;
+ auto Rfp = 1.0R;
+
+ auto wfp = 1.0w;
+ auto Wfp = 1.0W;
+ auto qfp = 1.0q;
+ auto Qfp = 1.0Q;
+}
+
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 7 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 11 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 15 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 19 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 25 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 29 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 33 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 37 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 43 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 47 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 51 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 55 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 61 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 65 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 69 }
+// { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 73 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stddef.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stddef.C
new file mode 100644
index 0000000..dad9200
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stddef.C
@@ -0,0 +1,6 @@
+// PR c++/54249
+// { dg-do compile { target c++11 } }
+
+#include <stddef.h>
+
+::nullptr_t n;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stdint.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stdint.C
new file mode 100644
index 0000000..434d458
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/stdint.C
@@ -0,0 +1,135 @@
+// PR c++/52764
+// { dg-require-effective-target stdint_types }
+// { dg-do compile { target c++11 } }
+
+#include <stdint.h>
+
+#ifdef __INT8_TYPE__
+# if (!defined INT8_MAX \
+ || !defined INT8_MIN)
+# error
+# endif
+#endif
+#ifdef __UINT8_TYPE__
+# if !defined UINT8_MAX
+# error
+# endif
+#endif
+#ifdef __INT16_TYPE__
+# if (!defined INT16_MAX \
+ || !defined INT16_MIN)
+# error
+# endif
+#endif
+#ifdef __UINT16_TYPE__
+# if !defined UINT16_MAX
+# error
+# endif
+#endif
+#ifdef __INT32_TYPE__
+# if (!defined INT32_MAX \
+ || !defined INT32_MIN)
+# error
+# endif
+#endif
+#ifdef __UINT32_TYPE__
+# if !defined UINT32_MAX
+# error
+# endif
+#endif
+#ifdef __INT64_TYPE__
+# if (!defined INT64_MAX \
+ || !defined INT64_MIN)
+# error
+# endif
+#endif
+#ifdef __UINT64_TYPE__
+# if !defined UINT64_MAX
+# error
+# endif
+#endif
+
+#if (!defined INT_LEAST8_MAX \
+ || !defined INT_LEAST8_MIN \
+ || !defined UINT_LEAST8_MAX \
+ || !defined INT_LEAST16_MAX \
+ || !defined INT_LEAST16_MIN \
+ || !defined UINT_LEAST16_MAX \
+ || !defined INT_LEAST32_MAX \
+ || !defined INT_LEAST32_MIN \
+ || !defined UINT_LEAST32_MAX \
+ || !defined INT_LEAST64_MAX \
+ || !defined INT_LEAST64_MIN \
+ || !defined UINT_LEAST64_MAX)
+#error
+#endif
+
+#if (!defined INT_FAST8_MAX \
+ || !defined INT_FAST8_MIN \
+ || !defined UINT_FAST8_MAX \
+ || !defined INT_FAST16_MAX \
+ || !defined INT_FAST16_MIN \
+ || !defined UINT_FAST16_MAX \
+ || !defined INT_FAST32_MAX \
+ || !defined INT_FAST32_MIN \
+ || !defined UINT_FAST32_MAX \
+ || !defined INT_FAST64_MAX \
+ || !defined INT_FAST64_MIN \
+ || !defined UINT_FAST64_MAX)
+#error
+#endif
+
+#ifdef __INTPTR_TYPE__
+# if (!defined INTPTR_MAX \
+ || !defined INTPTR_MIN)
+# error
+# endif
+#endif
+#ifdef __UINTPTR_TYPE__
+# if !defined UINTPTR_MAX
+# error
+# endif
+#endif
+
+#if (!defined INTMAX_MAX \
+ || !defined INTMAX_MIN \
+ || !defined UINTMAX_MAX)
+#error
+#endif
+
+#if (!defined PTRDIFF_MAX \
+ || !defined PTRDIFF_MIN)
+#error
+#endif
+
+#if (!defined SIG_ATOMIC_MAX \
+ || !defined SIG_ATOMIC_MIN)
+#error
+#endif
+
+#if !defined SIZE_MAX
+#error
+#endif
+
+#if (!defined WCHAR_MAX \
+ || !defined WCHAR_MIN)
+#error
+#endif
+
+#if (!defined WINT_MAX \
+ || !defined WINT_MIN)
+#error
+#endif
+
+#if (!defined INT8_C \
+ || !defined INT16_C \
+ || !defined INT32_C \
+ || !defined INT64_C \
+ || !defined UINT8_C \
+ || !defined UINT16_C \
+ || !defined UINT32_C \
+ || !defined UINT64_C \
+ || !defined INTMAX_C \
+ || !defined UINTMAX_C)
+#error
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/syntax-err1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/syntax-err1.C
new file mode 100644
index 0000000..5f5a236
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/syntax-err1.C
@@ -0,0 +1,8 @@
+// PR c++/47198
+// { dg-do compile { target c++11 } }
+
+struct S
+{
+ template < int > sometype foo (); // { dg-error "sometype. does not name a type" }
+ S () = default;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-constructor-bug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-constructor-bug.C
new file mode 100644
index 0000000..9d8a3bd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-constructor-bug.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+struct S { };
+
+struct T
+{
+ S s;
+};
+
+void f(T const &);
+
+void g()
+{
+ f((T){S()});
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-va-arg-bug.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-va-arg-bug.C
new file mode 100644
index 0000000..616f2f4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp-va-arg-bug.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wno-abi" { target arm_eabi } }
+#include <stdarg.h>
+
+struct S { };
+void f(S const &);
+
+void g(va_list args)
+{
+ f(va_arg(args, S));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default1.C
new file mode 100644
index 0000000..33f6c9e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default1.C
@@ -0,0 +1,32 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename T = int> void f()
+{
+ static_assert(is_same<T, int>::value,
+ "T can only be instantiated with an int");
+}
+
+template<typename T = int, typename U>
+void f(U)
+{
+ static_assert(is_same<T, int>::value,
+ "T can only be instantiated with an int");
+}
+
+void g()
+{
+ float pi = 3.14159;
+ f();
+ f(pi);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default2.C
new file mode 100644
index 0000000..2a41e22
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default2.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+template <class T, class U = double>
+void f(T t = 0, U u = 0); // { dg-message "note" }
+
+void g()
+{
+ f(1, 'c'); // f<int,char>(1,'c')
+ f(1); // f<int,double>(1,0)
+ f(); // { dg-error "no matching function" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 10 }
+ f<int>(); // f<int,double>(0,0)
+ f<int,char>(); // f<int,char>(0,0)
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default3.C
new file mode 100644
index 0000000..2d59f47
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default3.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U = typename T::value_type>
+void f(T);
+
+void f(...);
+
+struct X {
+ typedef int value_type;
+};
+
+void g()
+{
+ f(X()); // okay
+ f(17); // okay?
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default4.C
new file mode 100644
index 0000000..783ff5b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default4.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+class X {
+ template<typename T = int> friend void f(X) { }
+ template<typename T> friend void g(X); // { dg-message "previously declared here" }
+ template<typename T = int> friend void h(X); // { dg-error "function template friend" }
+};
+
+template<typename T = int> void g(X) // { dg-error "default template argument" }
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default5.C
new file mode 100644
index 0000000..dd84d26
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/temp_default5.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+
+template <class Z = void, class T>
+void Foo(T)
+{
+ struct X {};
+}
+
+template <class T = int, typename U>
+void f(const U&)
+{
+ auto g = [] () {};
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/template_deduction.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/template_deduction.C
new file mode 100644
index 0000000..1186e80
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/template_deduction.C
@@ -0,0 +1,67 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test the "Augmented" template argument deduction when binding an lvalue to an rvalue reference.
+
+// { dg-do compile { target c++11 } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+template <class T, T v>
+struct integral_constant
+{
+ static const T value = v;
+ typedef T value_type;
+ typedef integral_constant<T, v> type;
+};
+
+typedef integral_constant<bool, true> true_type;
+typedef integral_constant<bool, false> false_type;
+
+template <class T> struct is_lvalue_reference : public integral_constant<bool, false> {};
+template <class T> struct is_lvalue_reference<T&> : public integral_constant<bool, true> {};
+
+template <class T> struct is_rvalue_reference : public integral_constant<bool, false> {};
+template <class T> struct is_rvalue_reference<T&&> : public integral_constant<bool, true> {};
+
+template <bool is_lvalue_ref, bool is_rvalue_ref, class T>
+void
+test1(T&&)
+{
+ sa<is_lvalue_reference<T&&>::value == is_lvalue_ref> t1;
+ sa<is_rvalue_reference<T&&>::value == is_rvalue_ref> t2;
+}
+
+template <bool is_lvalue_ref, bool is_rvalue_ref, class T>
+void
+test2(const T&&) // { dg-message "argument" }
+{
+ sa<is_lvalue_reference<const T&&>::value == is_lvalue_ref> t1;
+ sa<is_rvalue_reference<const T&&>::value == is_rvalue_ref> t2;
+}
+
+template <bool is_lvalue_ref, bool is_rvalue_ref, class T>
+void
+test3(T*&&)
+{
+ sa<is_lvalue_reference<T*&&>::value == is_lvalue_ref> t1;
+ sa<is_rvalue_reference<T*&&>::value == is_rvalue_ref> t2;
+}
+
+struct A {};
+
+A a;
+
+A source() {return A();}
+A* sourcep() {return 0;}
+
+int main()
+{
+ test1<true, false>(a);
+ test1<false, true>(source());
+ test2<false, true>(a); // { dg-error "lvalue" }
+ test2<false, true>(source());
+ test3<false, true>(&a);
+ test3<false, true>(sourcep());
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing1.C
new file mode 100644
index 0000000..7d9a906
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing1.C
@@ -0,0 +1,118 @@
+// Tests for late-specified return type.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=5" }
+
+auto f() -> int
+{
+ return 0;
+}
+
+template<class T, class U>
+auto add(T t, U u) -> decltype (t+u)
+{
+ return t+u;
+}
+
+template<class T, class U>
+decltype(T()+U()) add2(T t, U u)
+{
+ return t+u;
+}
+
+template <class T, class U>
+U ag (T, U)
+{
+ return U();
+}
+
+template<class T, class U>
+auto add3(T t, U u) -> decltype (ag(t,u))
+{
+ return ag(t,u);
+}
+
+template<class T, class U>
+decltype(*(T*)0+*(U*)0) add4(T t, U u)
+{
+ return t+u;
+}
+
+template <class T>
+struct A
+{
+ T f() {}
+ template <class U>
+ T g() {}
+ template <class V>
+ struct B
+ {
+ int MEM;
+ };
+};
+
+template <class T>
+auto f(T* t) -> decltype (t->f())
+{
+ return t->f();
+}
+
+template <class T>
+auto g(T t) -> decltype (t.f())
+{
+ return t.f();
+}
+
+template <class T, class U>
+auto h(T t, U u) -> decltype (t.template g<U>())
+{
+ return t.template g<U>();
+}
+
+struct D { };
+struct C: public A<int>::B<D>
+{
+};
+
+template <class T, class U, class V>
+auto k(T t, U u, V v) -> decltype (t.U::template B<V>::MEM)
+{
+ return t.U::template B<V>::MEM;
+}
+
+template <class T>
+auto l(T t) -> decltype (t)
+{
+ return t;
+}
+
+template <class T, T u>
+auto m(T t) -> decltype (u)
+{
+ return t;
+}
+
+A<int> a, *p;
+
+int main()
+{
+ // { dg-final { scan-assembler "_Z3addIidEDTplfp_fp0_ET_T0_" } }
+ auto i = add(1, 2.0);
+ // { dg-final { scan-assembler "_Z4add4IidEDTpldecvPT_Li0EdecvPT0_Li0EES0_S2_" } }
+ auto i4 = add4(1, 2.0);
+ // { dg-final { scan-assembler "_Z4add2IidEDTplcvT__EcvT0__EES0_S1_" } }
+ auto i2 = add2(1, 2.0);
+ // { dg-final { scan-assembler "_Z4add3IidEDTcl2agfp_fp0_EET_T0_" } }
+ auto i3 = add3(1, 2.0);
+ // { dg-final { scan-assembler "_Z1fI1AIiEEDTclptfp_1fEEPT_" } }
+ f(p);
+ // { dg-final { scan-assembler "_Z1gI1AIiEEDTcldtfp_1fEET_" } }
+ g(a);
+ // { dg-final { scan-assembler "_Z1hI1AIiEdEDTcldtfp_1gIT0_EEET_S2_" } }
+ h(a,1.0);
+ // { dg-final { scan-assembler "_Z1kI1C1AIiE1DEDtdtfp_srNT0_1BIT1_EE3MEMET_S4_S6_" } }
+ k( C(), A<int>(), D() );
+ // { dg-final { scan-assembler "_Z1lIiEDtfp_ET_" } }
+ l(1);
+ // { dg-final { scan-assembler "_Z1mIiLi1EEDtT0_ET_" } }
+ m<int,1>(1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing2.C
new file mode 100644
index 0000000..888d6f9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing2.C
@@ -0,0 +1,16 @@
+// PR c++/37967
+// Negative test for auto
+// { dg-do compile { target c++11 } }
+
+auto f1 () -> int;
+auto f2 (); // { dg-error "without trailing return type" "" { target { ! c++1y } } }
+int f3 () -> int; // { dg-error "trailing return type" }
+auto *f4 () -> int; // { dg-error "trailing return type" }
+
+struct A
+{
+ auto f5 () const -> int;
+ auto f6 (); // { dg-error "without trailing return type" "" { target { ! c++1y } } }
+ int f7 () -> int; // { dg-error "trailing return type" }
+ auto *f8 () -> int; // { dg-error "trailing return type" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing3.C
new file mode 100644
index 0000000..ced5d5e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing3.C
@@ -0,0 +1,64 @@
+// More auto/decltype mangling tests.
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=0" }
+
+template <class T>
+struct B
+{
+ static int i;
+};
+
+int&& x();
+
+template <class T>
+struct A
+{
+ static int i;
+ static int &ir;
+ static int &&irr;
+ template <class U>
+ auto f(U u) -> decltype (u + i);
+ template <class U>
+ auto fr(U u) -> decltype (u + ir);
+ template <class U>
+ auto frr(U u) -> decltype (u + irr);
+ template <class U>
+ auto g(U u) -> decltype (u + sizeof (i));
+ template <class U>
+ auto h(U u) -> decltype (u + B<U>::i);
+ template <class U>
+ auto j(U u) -> decltype (u + x());
+};
+
+template<class T> template<class U>
+auto A<T>::f(U u) -> decltype (u + i)
+{
+ return u + i;
+}
+
+template <class... Args>
+int f (Args... args);
+
+template <class... Args>
+auto g (Args... args) -> decltype (f ((args+1)...))
+{
+ return (f ((args+1)...));
+}
+
+int main()
+{
+ // { dg-final { scan-assembler "_ZN1AIiE1fIiEEDTplfp_L_ZNS0_1iEEET_" } }
+ A<int>().f(1);
+ // { dg-final { scan-assembler "_ZN1AIiE2frIiEEDTplfp_L_ZNS0_2irEEET_" } }
+ A<int>().fr(1);
+ // { dg-final { scan-assembler "_ZN1AIiE3frrIiEEDTplfp_L_ZNS0_3irrEEET_" } }
+ A<int>().frr(1);
+ // { dg-final { scan-assembler "_ZN1AIiE1gIiEEDTplfp_szL_ZNS0_1iEEET_" } }
+ A<int>().g(1);
+ // { dg-final { scan-assembler "_ZN1AIiE1hIiEEDTplfp_sr1BIT_E1iES3_" } }
+ A<int>().h(1);
+ // { dg-final { scan-assembler "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
+ A<int>().j(1);
+ // { dg-final { scan-assembler "_Z1gIJidEEDTcl1fspplfp_Li1EEEDpT_" } }
+ g(42, 1.0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing4.C
new file mode 100644
index 0000000..0ca96e4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing4.C
@@ -0,0 +1,12 @@
+// PR c++/38597
+// { dg-do compile { target c++11 } }
+
+template<class T, class U>
+auto f(T,U) -> decltype(T() + U())
+{ return T() + U(); }
+
+template<class T> void g(T){} // { dg-message "note" }
+
+int main() { g(f); } // { dg-error "no matching function" }
+// { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 10 }
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing5.C
new file mode 100644
index 0000000..48f3145
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing5.C
@@ -0,0 +1,10 @@
+// PR c++/38798, DR 770
+// { dg-do compile { target c++11 } }
+
+struct A {};
+auto foo() -> struct A {}
+
+enum B {};
+auto bar() -> enum B {}
+
+auto baz() -> struct C {} {} // { dg-error "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing6.C
new file mode 100644
index 0000000..0238740
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing6.C
@@ -0,0 +1,6 @@
+// PR c++/49003
+// { dg-do compile { target c++11 } }
+
+struct A {
+ auto a() const -> decltype(this) { return this; }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing7.C
new file mode 100644
index 0000000..b3397ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing7.C
@@ -0,0 +1,14 @@
+// PR c++/50365
+// { dg-do compile { target c++11 } }
+
+struct A { int i; };
+
+struct B {
+ B();
+ A* f();
+};
+
+B::B()
+{
+ int(f()->i);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing8.C
new file mode 100644
index 0000000..304845e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing8.C
@@ -0,0 +1,25 @@
+// PR c++/54359
+// { dg-require-effective-target c++11 }
+
+int& ref(int& x) { return x; }
+const int& ref(const int& x) { return x; }
+
+class A {
+ int x;
+ int f() const;
+ auto test1() const -> decltype(this);
+ auto test2() const -> decltype(ref(x));
+ auto test3() const -> decltype(f());
+};
+
+auto A::test1() const -> decltype(this) {
+ return this;
+}
+
+auto A::test2() const -> decltype(ref(x)) {
+ return ref(x);
+}
+
+auto A::test3() const -> decltype(f()) {
+ return f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing9.C
new file mode 100644
index 0000000..d7895b3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trailing9.C
@@ -0,0 +1,12 @@
+// PR c++/56646
+// { dg-require-effective-target c++11 }
+
+struct A {
+ void f();
+};
+
+void A::f() {
+ struct B {
+ auto g() -> void { }
+ };
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/traits1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/traits1.C
new file mode 100644
index 0000000..9085b71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/traits1.C
@@ -0,0 +1,133 @@
+// PR c++/57016
+// { dg-require-effective-target c++11 }
+
+template < typename _Tp, _Tp __v > struct integral_constant
+{
+ static constexpr _Tp value = __v;
+};
+template < bool, typename, typename > struct conditional;
+template < typename ... >struct __and_;
+template
+ <
+ typename
+ _B1,
+ typename
+ _B2 > struct __and_ <_B1, _B2 >:conditional < _B1::value, _B2, _B1 >::type
+{};
+template < typename _Pp > struct __not_:integral_constant < bool, _Pp::value >
+{};
+template < typename > struct add_rvalue_reference;
+template
+ < typename _Tp > typename add_rvalue_reference < _Tp >::type declval ();
+template < bool, typename _Iftrue, typename > struct conditional
+{
+ typedef _Iftrue type;
+};
+template < class, class > struct pair;
+template < typename > class allocator;
+template < typename, typename, typename > struct binary_function;
+template < typename _Tp > struct equal_to:binary_function < _Tp, _Tp, bool >
+{};
+template < typename > struct hash;
+template < >struct hash <int >
+{};
+template
+ <
+ typename,
+ typename,
+ typename,
+ typename, typename, typename, typename, typename > struct _Hashtable_base;
+template
+ <
+ typename,
+ typename
+ > struct __is_noexcept_hash:integral_constant < bool, noexcept ((declval)) >
+{}
+;
+struct _Identity;
+template < bool, bool _Constant_iterators, bool > struct _Hashtable_traits
+ ;
+struct _Mod_range_hashing;
+struct _Default_ranged_hash;
+struct _Prime_rehash_policy;
+template
+ <
+ typename
+ _Tp,
+ typename
+ _Hash
+ >
+ using
+ __cache_default
+ =
+ __not_
+ <
+ __and_
+ <
+ integral_constant
+ < bool, __is_final (_Hash) >, __is_noexcept_hash < _Tp, _Hash > >>;
+template < typename _Key, typename _Value, typename, typename _ExtractKey, typename _Equal, typename _H1, typename _H2, typename, typename _RehashPolicy, typename _Traits > class _Hashtable:
+_Hashtable_base
+ < _Key, _Value, _ExtractKey, _Equal, _H1, _H2, _RehashPolicy, _Traits >
+{}
+;
+template
+ <
+ bool
+ _Cache > using __uset_traits = _Hashtable_traits < _Cache, true, true >;
+template
+ <
+ typename
+ _Value,
+ typename
+ _Hash
+ =
+ hash
+ <
+ _Value
+ >,
+ typename
+ _Pred
+ =
+ equal_to
+ <
+ _Value
+ >,
+ typename
+ _Alloc
+ =
+ allocator
+ <
+ _Value
+ >,
+ typename
+ _Tr
+ =
+ __uset_traits
+ <
+ __cache_default
+ <
+ _Value,
+ _Hash
+ >::value
+ >
+ >
+ using
+ __uset_hashtable
+ =
+ _Hashtable
+ <
+ _Value,
+ _Value,
+ _Alloc,
+ _Identity,
+ _Pred,
+ _Hash,
+ _Mod_range_hashing, _Default_ranged_hash, _Prime_rehash_policy, _Tr >;
+template < class _Value, class = hash < _Value > >class unordered_set
+{
+ typedef __uset_hashtable < _Value > iterator;
+ template < typename > pair < iterator, bool > emplace ();
+}
+;
+template class unordered_set < int >;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trivial1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trivial1.C
new file mode 100644
index 0000000..3fed570
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/trivial1.C
@@ -0,0 +1,86 @@
+// { dg-do compile { target c++11 } }
+
+// [basic.types]/10:
+// Scalar types, trivial class types (Clause 9), arrays of such types and
+// cv-qualified versions of these types (3.9.3) are collectively called
+// trivial types.
+
+// [class]/6:
+// A trivially copyable class is a class that:
+// * has no non-trivial copy constructors (12.8),
+// * has no non-trivial copy assignment operators (13.5.3, 12.8), and
+// * has a trivial destructor (12.4).
+// A trivial class is a class that has a trivial default constructor (12.1)
+// and is trivially copyable.
+
+#include <type_traits>
+
+#define TRY(expr) static_assert (expr, #expr)
+#define YES(type) TRY(std::is_trivial<type>::value); \
+ TRY(std::is_trivial<type[]>::value); \
+ TRY(std::is_trivial<const volatile type>::value)
+#define NO(type) TRY(!std::is_trivial<type>::value); \
+ TRY(!std::is_trivial<type[]>::value); \
+ TRY(!std::is_trivial<const volatile type>::value)
+
+struct A;
+
+YES(int);
+YES(__complex int);
+YES(void *);
+YES(int A::*);
+typedef int (A::*pmf)();
+YES(pmf);
+
+struct A { ~A(); };
+NO(A);
+struct F: public A { int i; };
+NO(F);
+struct G: public A { A a; };
+NO(G);
+struct M { A a; };
+NO(M);
+
+class B
+{
+ int i;
+ __complex int c;
+ void *p;
+ double ar[4];
+ int A::* pm;
+ int (A::*pmf)();
+};
+YES(B);
+struct D: public B { };
+YES(D);
+struct E: public B { int q; };
+YES(E);
+struct D2: public B { };
+YES(D2);
+struct I: public D, public D2 { };
+YES(I);
+
+struct C
+{
+ int i;
+private:
+ int j;
+};
+YES(C);
+struct H: public C { };
+YES(H);
+struct N { C c; };
+YES(N);
+
+struct J { virtual void f(); };
+struct J2: J { };
+NO(J);
+NO(J2);
+struct K { };
+struct L: virtual K {};
+YES(K);
+NO(L);
+
+// PR c++/41421
+struct O { O(int); };
+NO(O);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-addr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-addr.C
new file mode 100644
index 0000000..11389bf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-addr.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+
+#include <cstddef>
+
+bool operator"" _yn(const char*, size_t);
+
+typedef bool (*pfunk)(const char*, size_t);
+pfunk p = &operator"" _yn;
+
+bool tf = p("Hello,\0 World!", 14);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C
new file mode 100644
index 0000000..d8d672e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C
@@ -0,0 +1,41 @@
+// { dg-do compile { target c++11 } }
+
+#include <cstddef>
+
+class Foo { };
+
+int
+operator"" _Foo(); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(int *); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(unsigned long int); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(double); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(const float *, std::size_t); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(const wchar_t *, int); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(const char16_t *); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(char...); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(unsigned long long int, char); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(const char *, std::size_t, int); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(long double &); // { dg-error "has invalid argument list" }
+
+Foo
+operator"" _Foo(std::size_t, const char16_t *); // { dg-error "has invalid argument list" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args.C
new file mode 100644
index 0000000..4680288
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args.C
@@ -0,0 +1,38 @@
+// { dg-do compile { target c++11 } }
+
+#include <cstddef>
+
+class Foo { };
+
+Foo
+operator"" _Foo(const char *);
+
+Foo
+operator"" _Foo(unsigned long long int);
+
+Foo
+operator"" _Foo(long double);
+
+Foo
+operator"" _Foo(char);
+
+Foo
+operator"" _Foo(wchar_t);
+
+Foo
+operator"" _Foo(char16_t);
+
+Foo
+operator"" _Foo(char32_t);
+
+Foo
+operator"" _Foo(const char *, std::size_t);
+
+Foo
+operator"" _Foo(const wchar_t *, std::size_t);
+
+Foo
+operator"" _Foo(const char16_t *, std::size_t);
+
+Foo
+operator"" _Foo(const char32_t *, std::size_t);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
new file mode 100644
index 0000000..b9cb8e0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
@@ -0,0 +1,14 @@
+// PR c++/52521
+// { dg-do compile { target c++11 } }
+
+#include <cstddef>
+
+int operator "" _a (const char *);
+int operator "" _a (const char *, std::size_t);
+int a = 123_a;
+int a2 = "abc"_a;
+
+int operator "" _b (const char *, std::size_t);
+int operator "" _b (const char *);
+int b = 123_b;
+int b2 = "abc"_b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C
new file mode 100644
index 0000000..87e0082
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+extern "C" {
+
+int
+operator"" _badclinkage(unsigned long long); // { dg-error "operator with C linkage" }
+
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C
new file mode 100644
index 0000000..3093a7c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+#include <string>
+
+std::string operator"" _xxx(const char*, size_t);
+
+std::string operator"" _yyy(const char*, size_t);
+
+std::string concat = "Hello, "_xxx "World!"_yyy; // { dg-error "inconsistent user-defined literal suffixes" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat.C
new file mode 100644
index 0000000..d4f10c2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-concat.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+
+#include <string>
+
+std::string operator"" _www(const char*, size_t);
+
+std::string concat01 = "Hello, " "World!"_www;
+
+std::string concat10 = "Hello, "_www "World!";
+
+std::string concat11 = "Hello, "_www "World!"_www;
+
+
+class Tachyon { };
+
+Tachyon operator"" _fast(const char*, size_t);
+
+int operator"" _fast(const char32_t*, size_t);
+
+int speedy01 = "Hello, " U"World!"_fast;
+
+int speedy10 = "Hello, "_fast U"World!";
+
+int speedy11 = "Hello, "_fast U"World!"_fast;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C
new file mode 100644
index 0000000..4c2f7ed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+constexpr unsigned long long
+operator"" _grow(unsigned long long n)
+{ return 2 * n; }
+
+double buffer[25_grow];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C
new file mode 100644
index 0000000..cb4c359
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C
@@ -0,0 +1,17 @@
+// { dg-options "-std=c++98" }
+
+#include <cstddef>
+
+int
+operator"" _mm(long double m) // { dg-warning "user-defined literals only available with" }
+{ return int(1000.0L * m); }
+
+int in = 0.0254_mm; // { dg-error "invalid suffix" }
+
+int
+operator"" _Q(const char *, std::size_t) // { dg-warning "user-defined literals only available with" }
+{ return 42; }
+
+int x = "Hello"_Q; // { dg-error "invalid conversion from" "invalid" }
+
+// { dg-error "expected" "expected" { target *-*-* } 15 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C
new file mode 100644
index 0000000..a68e2e0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+// Check that undeclared literal operator calls and literals give appropriate errors.
+
+int i = operator"" _Bar('x'); // { dg-error "was not declared in this scope" }
+int j = 'x'_Bar; // { dg-error "unable to find character literal operator|with|argument" }
+
+int ii = operator"" _BarCharStr("Howdy, Pardner!"); // { dg-error "was not declared in this scope" }
+int jj = "Howdy, Pardner!"_BarCharStr; // { dg-error "unable to find string literal operator|Possible missing length argument" }
+
+unsigned long long iULL = operator"" _BarULL(666ULL); // { dg-error "was not declared in this scope" }
+unsigned long long jULL = 666_BarULL; // { dg-error "unable to find numeric literal operator" }
+
+long double iLD = operator"" _BarLD(666.0L); // { dg-error "was not declared in this scope" }
+long double jLD = 666.0_BarLD; // { dg-error "unable to find numeric literal operator" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C
new file mode 100644
index 0000000..fef1a53
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C
@@ -0,0 +1,33 @@
+// { dg-do run { target c++11 } }
+
+// Make sure embedded quotes are not a problem for string and char literals.
+
+#include <cstdint>
+#include <cassert>
+
+int operator"" _embedchar(char)
+{ return 41; }
+
+int operator"" _embedstr(const char*, std::size_t len)
+{ return 42 + len; }
+
+void
+test()
+{
+ int i = '\''_embedchar;
+
+ int j = "\""_embedstr;
+ assert(j == 43);
+
+ int k = "foo\""_embedstr;
+ assert(k == 46);
+
+ int l = "\"bar"_embedstr;
+ assert(l == 46);
+}
+
+int
+main()
+{
+ test();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-friend.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-friend.C
new file mode 100644
index 0000000..54d7b7a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-friend.C
@@ -0,0 +1,28 @@
+// { dg-do compile { target c++11 } }
+
+long double
+operator"" _Hertz(long double);
+
+class Foo
+{
+public:
+ Foo() { }
+
+ friend Foo operator"" _Bar(char);
+
+ friend long double
+ operator"" _Hertz(long double omega)
+ { return omega / 6.28318530717958648; }
+};
+
+Foo
+operator"" _Bar(char)
+{ return Foo(); }
+
+Foo f1 = operator"" _Bar('x');
+
+Foo f2 = 'x'_Bar;
+
+long double fm1 = operator"" _Hertz(552.92L);
+
+long double fm2 = 552.92_Hertz;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-general.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-general.C
new file mode 100644
index 0000000..d69db56
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-general.C
@@ -0,0 +1,51 @@
+// { dg-do run { target c++11 } }
+
+// Test user-defined literals.
+// Test simple operator declaration and definition.
+
+#include <cstring>
+#include <string>
+#include <complex>
+#include <cassert>
+
+long double operator"" _v(long double);
+std::string operator"" _w(const char16_t*, size_t);
+unsigned operator"" _w(const char*);
+
+std::complex<double>
+operator"" _i(long double y)
+{ return std::complex<double>(0.0L, y); }
+
+void
+test1()
+{
+ long double x = operator"" _v(1.2L);
+ assert(x == 2.2L);
+
+ std::string s = operator"" _w(u"one", 3);
+ assert(s == "boo");
+
+ unsigned u = operator"" _w("Hello, World!");
+ assert(u == 13U);
+
+ std::complex<double> i = operator"" _i(2.0);
+ assert(i == std::complex<double>(0.0, 2.0));
+}
+
+int
+main()
+{
+ test1();
+}
+
+long double
+operator"" _v(long double x)
+{ return x + 1.0L; }
+
+std::string
+operator"" _w(const char16_t*, size_t)
+{ return std::string("boo"); }
+
+unsigned
+operator"" _w(const char* str)
+{ return strlen(str); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C
new file mode 100644
index 0000000..ea6095d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C
@@ -0,0 +1,63 @@
+// { dg-do compile { target c++11 } }
+
+#include <cstdint>
+
+int operator"" _bar (long double);
+
+double operator"" _foo (long long unsigned);
+
+int i = 12_bar; // { dg-error "unable to find numeric literal operator|with|argument" }
+
+double d = 1.2_foo; // { dg-error "unable to find numeric literal operator|with|argument" }
+
+int operator"" _char(char);
+
+int operator"" _wchar_t(wchar_t);
+
+int operator"" _char16_t(char16_t);
+
+int operator"" _char32_t(char32_t);
+
+int cwcx = 'c'_wchar_t; // { dg-error "unable to find character literal operator|with|argument" }
+int cc16 = 'c'_char16_t; // { dg-error "unable to find character literal operator|with|argument" }
+int cc32 = 'c'_char32_t; // { dg-error "unable to find character literal operator|with|argument" }
+
+int wccx = L'c'_char; // { dg-error "unable to find character literal operator|with|argument" }
+int wcc16 = L'c'_char16_t; // { dg-error "unable to find character literal operator|with|argument" }
+int wcc32 = L'c'_char32_t; // { dg-error "unable to find character literal operator|with|argument" }
+
+int c16c = u'c'_char; // { dg-error "unable to find character literal operator|with|argument" }
+int c16wc = u'c'_wchar_t; // { dg-error "unable to find character literal operator|with|argument" }
+int c16c32 = u'c'_char32_t; // { dg-error "unable to find character literal operator|with|argument" }
+
+int c32c = U'c'_char; // { dg-error "unable to find character literal operator|with|argument" }
+int c32wc = U'c'_wchar_t; // { dg-error "unable to find character literal operator|with|argument" }
+int c32c16 = U'c'_char16_t; // { dg-error "unable to find character literal operator|with|argument" }
+
+int operator"" _char_str(const char*, std::size_t);
+
+int operator"" _wchar_t_str(const wchar_t*, std::size_t);
+
+int operator"" _char16_t_str(const char16_t*, std::size_t);
+
+int operator"" _char32_t_str(const char32_t*, std::size_t);
+
+int strwstr = "str"_wchar_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int strstr16 = "str"_char16_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int strstr32 = "str"_char32_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+
+int str8wstr = u8"str"_wchar_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int str8str16 = u8"str"_char16_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int str8str32 = u8"str"_char32_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+
+int wstrstr = L"str"_char_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int wstrstr16 = L"str"_char16_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int wstrstr32 = L"str"_char32_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+
+int str16str = u"str"_char_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int str16wstr = u"str"_wchar_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int str16str32 = u"str"_char32_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+
+int str32str = U"str"_char_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int str32wstr = U"str"_wchar_t_str; // { dg-error "unable to find string literal operator|with|arguments" }
+int str32str16 = U"str"_char16_t_str; // { dg-error "unable to find string literal operator string operator|with|arguments" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-inline.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-inline.C
new file mode 100644
index 0000000..fd8b9a0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-inline.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+
+// Literal operators can be inline.
+
+inline int
+operator"" _thing1(char cc)
+{ return 42 * cc; }
+
+int operator"" _thing2(char cc);
+
+class Foo
+{
+ int
+ friend operator"" _thing2(char cc)
+ { return 42 * cc; }
+};
+
+int i = operator"" _thing1('x');
+int j = 'x'_thing1;
+
+int iF = operator"" _thing2('x');
+int jF = 'x'_thing2;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C
new file mode 100644
index 0000000..3e99807
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+
+extern "C"_badlinkage { // { dg-error "expected unqualified-id before" }
+
+int foo();
+
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C
new file mode 100644
index 0000000..8840dcd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C
@@ -0,0 +1,8 @@
+// PR c++/52521
+// { dg-do compile { target c++11 } }
+// { dg-final { scan-assembler "_Zli2_wPKc" } }
+
+int operator "" _w(const char*);
+int main() {
+ 123_w;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C
new file mode 100644
index 0000000..2a31452
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+class Foo
+{
+public:
+ Foo() { }
+ int operator"" _Bar(char32_t); // { dg-error "must be a non-member function" }
+};
+
+int i = operator"" _Bar(U'x'); // { dg-error "was not declared in this scope" }
+int j = U'x'_Bar; // { dg-error "unable to find character literal operator" }
+
+int
+Foo::operator"" _Bar(char32_t) // { dg-error "must be a non-member function" }
+{ return 42; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C
new file mode 100644
index 0000000..7329890
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C
@@ -0,0 +1,42 @@
+// { dg-do run { target c++11 } }
+
+// Test user-defined literals.
+// Test simple operator declaration and definition in namespaces.
+
+#include <cmath>
+#include <limits>
+
+namespace Long
+{
+ long double operator"" _LL(long double);
+}
+
+namespace Short
+{
+ short
+ operator"" _SS(long double x)
+ { return std::fmod(x, static_cast<long double>(std::numeric_limits<short>::max())); }
+}
+
+void
+test1()
+{
+ long double x = Long::operator "" _LL(1.2L);
+
+ using namespace Short;
+ short s = operator"" _SS(1.2L);
+ short s2 = 1.2_SS;
+}
+
+int
+main()
+{
+ test1();
+}
+
+namespace Long
+{
+ long double
+ operator"" _LL(long double x)
+ { return x + 2.0L; }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C
new file mode 100644
index 0000000..89c7581
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+// Test user-defined literals.
+// Test error on non-function declaration.
+
+double operator"" _baddecl; // { dg-error "as non-function" }
+
+template<char...>
+ int operator"" _badtmpldecl; // { dg-error "as non-function" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C
new file mode 100644
index 0000000..ddaa1aa6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+// Test user-defined literals.
+// Test error on non-empty string after 'operator' keyword.
+
+double operator"hi" _badword(long double); // { dg-error "expected empty string after" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C
new file mode 100644
index 0000000..d1f3238
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+float operator ""_abc(const char*);
+
+int operator""_def(long double);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C
new file mode 100644
index 0000000..790726f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+char32_t
+operator"" (char32_t C) // { dg-error "expected suffix identifier" }
+{ return C; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C
new file mode 100644
index 0000000..9120ae4
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+// Test user-defined literals.
+// Test warning on declaration without leading underscore.
+
+long double operator"" nounder(long double); // { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" }
+
+template<char...>
+ int operator"" nounder(); // { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C
new file mode 100644
index 0000000..d71f4a2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C
@@ -0,0 +1,42 @@
+// { dg-do compile { target c++11 } }
+
+// Can't have *both* literal operator template and raw literal operator.
+
+int
+operator"" _abc(const char*)
+ {
+ return 42;
+ }
+
+template<char...>
+ int
+ operator"" _abc() // { dg-error "literal operator template|conflicts with raw literal operator" }
+ {
+ return 13;
+ }
+
+template<char...>
+ int
+ operator"" _def()
+ {
+ return 12;
+ }
+
+int
+operator"" _def(const char*) // { dg-error "raw literal operator|conflicts with literal operator template" }
+ {
+ return 43;
+ }
+
+int
+operator"" _ghi(long double)
+ {
+ return 42;
+ }
+
+template<char...>
+ int
+ operator"" _ghi() // OK
+ {
+ return 13;
+ }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow-neg.C
new file mode 100644
index 0000000..d7e5e4b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow-neg.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-Woverflow" }
+// PR c++/52654
+int
+operator"" _w(unsigned long long)
+{ return 0; }
+
+int
+operator"" _w(long double)
+{ return 0.0L; }
+
+int i = 12345678901234567890123456789012345678901234567890_w;
+int j = 12345678901234567890123456789.012345678901234567890e+1234567890_w;
+int k = 12345678901234567890123456789.012345678901234567890e-1234567890_w;
+
+// { dg-warning "integer literal exceeds range of " "" { target *-*-* } 12 }
+// { dg-warning "floating literal exceeds range of " "" { target *-*-* } 13 }
+// { dg-warning "floating literal truncated to zero" "" { target *-*-* } 14 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow.C
new file mode 100644
index 0000000..057978c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-overflow.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+// PR c++/52654
+
+int
+operator"" _w(const char*)
+{ return 0; }
+
+template<char...>
+ int
+ operator"" _tw()
+ { return 0; }
+
+int i = 12345678901234567890123456789012345678901234567890_w;
+int j = 12345678901234567890123456789.012345678901234567890e+1234567890_w;
+int k = 12345678901234567890123456789.012345678901234567890e-1234567890_w;
+
+int ti = 12345678901234567890123456789012345678901234567890_tw;
+int tj = 12345678901234567890123456789.012345678901234567890e+1234567890_tw;
+int tk = 12345678901234567890123456789.012345678901234567890e-1234567890_tw;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C
new file mode 100644
index 0000000..64b6f82
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+int
+operator"" _badpreproc(const char *str)
+{ return 0; }
+
+#if 123_badpreproc // { dg-error "user-defined literal in preprocessor expression" }
+# error ("user-defined literal in preprocessor expression") // { dg-error "user-defined literal in preprocessor expression" }
+#endif
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C
new file mode 100644
index 0000000..8969c96
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C
@@ -0,0 +1,27 @@
+// { dg-do compile { target c++11 } }
+// PR c++/50958
+
+typedef decltype(sizeof(0)) size_type;
+
+constexpr size_type
+cstrlen_impl(const char* s, size_type i)
+{
+ return s[i] ? cstrlen_impl(s, i + 1) : i;
+}
+
+constexpr size_type
+cstrlen(const char* s)
+{
+ return s ? cstrlen_impl(s, 0) : throw 0;
+}
+
+constexpr size_type
+operator "" _lenraw(const char* digits)
+{
+ return cstrlen(digits);
+}
+
+static_assert(123_lenraw == 3, "Ouch");
+static_assert(1_lenraw == 1, "Ouch");
+static_assert(012_lenraw == 3, "Ouch");
+static_assert(0_lenraw == 1, "Ouch");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C
new file mode 100644
index 0000000..be68333
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+// Make sure handing a string to a raw literal generates a sensible error message.
+
+int operator"" _embedraw(const char*)
+{ return 41; }
+
+int k = "Boo!"_embedraw; // { dg-error "unable to find string literal operator" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C
new file mode 100644
index 0000000..c3259ed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C
@@ -0,0 +1,20 @@
+// { dg-do run { target c++11 } }
+
+#include <cassert>
+#include <cstring>
+
+int
+operator"" _raw_umber(const char * str)
+{
+ return strlen(str);
+}
+
+int
+main()
+{
+ int i = 0123012301230123012301230123012301230123012301230123012301230123_raw_umber;
+ assert( i == 64 );
+
+ int j = 90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789_raw_umber;
+ assert( j == 101 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C
new file mode 100644
index 0000000..7ca37b2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+
+#include <string>
+
+std::string operator"" _i18n(const char*, std::size_t);
+
+std::string vogon_poem = R"V0G0N(
+ O freddled gruntbuggly thy micturations are to me
+ As plured gabbleblochits on a lurgid bee.
+ Groop, I implore thee my foonting turlingdromes.
+ And hooptiously drangle me with crinkly bindlewurdles,
+ Or I will rend thee in the gobberwarts with my blurlecruncheon, see if I don't.
+
+ (by Prostetnic Vogon Jeltz; see p. 56/57)
+)V0G0N"_i18n;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C
new file mode 100644
index 0000000..4241d0a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C
@@ -0,0 +1,39 @@
+// { dg-do run { target c++11 } }
+
+#include <cstdint>
+#include <cassert>
+
+int operator"" _foo(const char*) { return 0; }
+int operator"" _foo(unsigned long long int) { return 1; }
+int operator"" _foo(long double) { return 2; }
+int operator"" _foo(char) { return 3; }
+int operator"" _foo(wchar_t) { return 4; }
+int operator"" _foo(char16_t) { return 5; }
+int operator"" _foo(char32_t) { return 6; }
+int operator"" _foo(const char*, std::size_t) { return 7; }
+int operator"" _foo(const wchar_t*, std::size_t) { return 8; }
+int operator"" _foo(const char16_t*, std::size_t) { return 9; }
+int operator"" _foo(const char32_t*, std::size_t) { return 10; }
+template<char...> int operator"" _foo2() { return 20; }
+int operator"" _foo2(unsigned long long int) { return 21; }
+
+namespace bar {
+int operator"" _foo(unsigned long long int) { return 101; }
+}
+using namespace bar;
+
+int
+main()
+{
+ assert(123_foo == 101);
+ assert(0.123_foo == 2);
+ assert('c'_foo == 3);
+ assert(L'c'_foo == 4);
+ assert(u'c'_foo == 5);
+ assert(U'c'_foo == 6);
+ assert("abc"_foo == 7);
+ assert(L"abc"_foo == 8);
+ assert(u"abc"_foo == 9);
+ assert(U"abc"_foo == 10);
+ assert(123_foo2 == 21);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C
new file mode 100644
index 0000000..c635590
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C
@@ -0,0 +1,49 @@
+// { dg-do compile { target c++11 } }
+
+// Test that the standard suffixes shadow any user-defined suffixes of the same name.
+long double
+operator"" L(long double x) // { dg-warning "floating point suffix|shadowed by implementation" }
+{ return x; }
+
+unsigned long long int
+operator"" ULL(unsigned long long int k) // { dg-warning "integer suffix|shadowed by implementation" }
+{ return k; }
+
+long double
+operator"" l(long double x) // { dg-warning "floating point suffix|shadowed by implementation" }
+{ return x; }
+
+unsigned long long int
+operator"" ull(unsigned long long int k) // { dg-warning "integer suffix|shadowed by implementation" }
+{ return k; }
+
+// Namespaces are no hiding place.
+namespace Long
+{
+
+long double
+operator"" L(long double x) // { dg-warning "integer suffix|shadowed by implementation" }
+{ return x; }
+
+unsigned long long int
+operator"" ULL(unsigned long long int k) // { dg-warning "integer suffix|shadowed by implementation" }
+{ return k; }
+
+long double
+operator"" l(long double x) // { dg-warning "integer suffix|shadowed by implementation" }
+{ return x; }
+
+unsigned long long int
+operator"" ull(unsigned long long int k) // { dg-warning "integer suffix|shadowed by implementation" }
+{ return k; }
+
+}
+
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 5 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 9 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 13 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 17 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 25 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 29 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 33 }
+// { dg-warning "literal operator suffixes not preceded by|are reserved for future standardization" "reserved" { target *-*-* } 37 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C
new file mode 100644
index 0000000..acfda45
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C
@@ -0,0 +1,46 @@
+// { dg-do compile { target c++11 } }
+// PR c++/50941
+
+typedef decltype(sizeof(0)) size_type;
+
+constexpr size_type
+operator"" _len(const char*, size_type len)
+{
+ return len;
+}
+
+constexpr size_type
+operator"" _len(const wchar_t*, size_type len)
+{
+ return len;
+}
+
+constexpr size_type
+operator"" _len(const char16_t*, size_type len)
+{
+ return len;
+}
+
+constexpr size_type
+operator"" _len(const char32_t*, size_type len)
+{
+ return len;
+}
+
+static_assert( ""_len == 0, "Ouch");
+static_assert(u8""_len == 0, "Ouch");
+static_assert( L""_len == 0, "Ouch");
+static_assert( u""_len == 0, "Ouch");
+static_assert( U""_len == 0, "Ouch");
+
+static_assert( "1"_len == 1, "Ouch");
+static_assert(u8"1"_len == 1, "Ouch");
+static_assert( L"1"_len == 1, "Ouch");
+static_assert( u"1"_len == 1, "Ouch");
+static_assert( U"1"_len == 1, "Ouch");
+
+static_assert( "123"_len == 3, "Ouch");
+static_assert(u8"123"_len == 3, "Ouch");
+static_assert( L"123"_len == 3, "Ouch");
+static_assert( u"123"_len == 3, "Ouch");
+static_assert( U"123"_len == 3, "Ouch");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.C
new file mode 100644
index 0000000..734a0f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+// { dg-require-effective-target stdint_types }
+// PR c++/55582
+
+#include "udlit-string-literal.h"
+
+using namespace my_string_literals;
+
+decltype("Hello, World!"s) s;
+decltype(u8"Hello, World!"s) s8;
+decltype(L"Hello, World!"s) ws;
+decltype(u"Hello, World!"s) s16;
+decltype(U"Hello, World!"s) s32;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.h b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.h
new file mode 100644
index 0000000..e61034e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-string-literal.h
@@ -0,0 +1,22 @@
+#pragma GCC system_header
+
+#include <string>
+
+inline namespace my_string_literals
+{
+ std::string
+ operator"" s(const char* str, std::size_t len)
+ { return std::string{str, len}; }
+
+ std::wstring
+ operator"" s(const wchar_t* str, std::size_t len)
+ { return std::wstring{str, len}; }
+
+ std::u16string
+ operator"" s(const char16_t* str, std::size_t len)
+ { return std::u16string{str, len}; }
+
+ std::u32string
+ operator"" s(const char32_t* str, std::size_t len)
+ { return std::u32string{str, len}; }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C
new file mode 100644
index 0000000..7283fed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+#include <string>
+
+std::string operator"" 5X(const char*, std::size_t); // { dg-error "expected suffix identifier" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C
new file mode 100644
index 0000000..189e445
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+
+#include "udlit_system_header"
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-template.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-template.C
new file mode 100644
index 0000000..de21b66
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-template.C
@@ -0,0 +1,50 @@
+// { dg-do run { target c++11 } }
+
+// Test user-defined literals.
+// Test template operator declaration and definition.
+
+#include <cassert>
+
+template<char...>
+ int operator"" _abc();
+
+template<>
+ int
+ operator"" _abc<>()
+ { return -1; }
+
+template<>
+ int
+ operator"" _abc<'L','U','E'>()
+ { return 42; }
+
+template<>
+ int
+ operator"" _abc<'6','6','6'>()
+ { return 21; }
+
+int
+test1()
+{
+ int i = operator"" _abc<'1','2','3'>();
+ assert(i == 45);
+ int universal_meaning = operator"" _abc<'L','U','E'>();
+ assert(universal_meaning == 42);
+ int b = operator"" _abc<'6','6','6'>();
+ int z = operator"" _abc<>();
+ assert(z == -1);
+ int j = 123_abc;
+ assert(j == i);
+ int jb = 666_abc;
+ assert(jb == b);
+}
+
+int
+main()
+{
+ test1();
+}
+
+template<char... Chars>
+ int operator"" _abc()
+ { return 42 + sizeof...(Chars); }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C
new file mode 100644
index 0000000..678a53e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+
+template<char...>
+ int operator"" _xyz(unsigned long long); // { dg-error "has invalid argument list" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C
new file mode 100644
index 0000000..cec79a5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+
+template<char...>
+ int operator"" _abc();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C
new file mode 100644
index 0000000..f681ecf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+class Foo { };
+
+template<wchar_t...>
+ Foo operator"" _Foo(); // { dg-error "literal operator template|has invalid parameter list" }
+
+template<char>
+ Foo operator"" _Bar(); // { dg-error "literal operator template|has invalid parameter list" }
+
+template<typename... Type>
+ Foo operator"" _Bar(); // { dg-error "literal operator template|has invalid parameter list" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C
new file mode 100644
index 0000000..bc7eaf6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+
+class Foo { };
+
+template<char...>
+ Foo operator"" _Foo();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit_system_header b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit_system_header
new file mode 100644
index 0000000..d541f24
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/udlit_system_header
@@ -0,0 +1,6 @@
+
+#pragma GCC system_header
+
+char
+operator"" stdsuffix(char __c)
+{ return __c/2; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union1.C
new file mode 100644
index 0000000..ff415fc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union1.C
@@ -0,0 +1,34 @@
+// Negative test for C++11 unrestricted unions
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "implicitly deleted because" }
+
+struct A
+{
+ A();
+ A(const A&);
+ ~A();
+};
+
+union B
+{
+ A a; // { dg-error "union member" }
+};
+
+B b; // { dg-error "B::B\\(\\)" "B::B" }
+B b2(b); // { dg-error "B::B\\(const B&\\)" "B::B" }
+
+struct C
+{
+ union
+ {
+ A a; // { dg-error "union member" }
+ };
+};
+
+C c; // { dg-error "C::C\\(\\)" "C::C" }
+C c2(c); // { dg-error "C::C\\(const C&\\)" "C::C" }
+
+// { dg-error "B::~B" "B::~B" { target *-*-* } 17 }
+// { dg-error "B::~B" "B::~B" { target *-*-* } 18 }
+// { dg-error "C::~C" "C::~C" { target *-*-* } 28 }
+// { dg-error "C::~C" "C::~C" { target *-*-* } 29 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union2.C
new file mode 100644
index 0000000..5144094
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union2.C
@@ -0,0 +1,34 @@
+// Positive test for C++11 unrestricted unions
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+ A();
+ A(const A&);
+ ~A();
+};
+
+union B
+{
+ A a;
+ B();
+ B(const B&);
+ ~B();
+};
+
+B b;
+B b2(b);
+
+struct C
+{
+ union
+ {
+ A a;
+ };
+ C();
+ C(const C&);
+ ~C();
+};
+
+C c;
+C c2(c);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union3.C
new file mode 100644
index 0000000..d95d30c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union3.C
@@ -0,0 +1,68 @@
+// Runtime test for C++11 unrestricted unions
+// { dg-do run { target c++11 } }
+
+int c, d;
+struct A
+{
+ int i;
+ A(): i(1) { ++c; }
+ A(const A&): i(2) { ++c; }
+ ~A() { ++d; }
+};
+
+union B
+{
+ A a;
+ B() { }
+ B(const B& b) { }
+ ~B() { }
+};
+
+struct C
+{
+ union { A a; };
+ C() { }
+ C(const C&) { }
+ ~C() { }
+};
+
+union D
+{
+ A a;
+ D(): a() { }
+ D(const D& d): a(d.a) { }
+ ~D() { a.~A(); }
+};
+
+struct E
+{
+ union { A a; };
+ E(): a() { }
+ E(const E& e): a (e.a) { }
+ ~E() { a.~A(); }
+};
+
+int main()
+{
+ {
+ B b1;
+ B b2(b1);
+
+ C c1;
+ C c2(c1);
+ }
+
+ if (c != 0 || d != 0)
+ return c+d*10;
+
+ {
+ D d1;
+ D d2(d1);
+
+ E e1;
+ E e2(e1);
+ }
+
+ if (c != 4 || d != 4)
+ return c*100+d*1000;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union4.C
new file mode 100644
index 0000000..cf9916d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union4.C
@@ -0,0 +1,17 @@
+// PR c++/48537
+// { dg-do compile { target c++11 } }
+
+struct SFoo
+{
+ SFoo() =delete; // { dg-message "declared" }
+};
+
+union UFoo // { dg-error "deleted" }
+{
+ SFoo foo;
+};
+
+int main()
+{
+ UFoo(); // { dg-error "deleted" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union5.C
new file mode 100644
index 0000000..8d2bc98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/union5.C
@@ -0,0 +1,24 @@
+// PR c++/49803
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+struct X
+{
+ X() = delete;
+};
+
+union Y
+{
+ // N3291=11-0061 12.6.2/8 says no initialization of
+ // of other variant members (i.e. m_x) should
+ // be performed.
+ Y() : m_char1{ }
+ { }
+
+ struct
+ {
+ char m_char1;
+ };
+
+ X m_x;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/unnamed_refs.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/unnamed_refs.C
new file mode 100644
index 0000000..c1b94bb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/unnamed_refs.C
@@ -0,0 +1,34 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+// Test: Unamed rvalue references are treated as lvalues.
+
+// { dg-do compile { target c++11 } }
+
+template <bool> struct sa;
+template <> struct sa<true> {};
+
+struct one {long x[1];};
+struct two {long x[2];};
+
+struct A {};
+
+one foo(const A&) {return one();}
+two foo(A&&) {return two();}
+
+template<typename _Tp>
+inline _Tp&&
+movel(_Tp& __t)
+{ return static_cast<_Tp&&>(__t); }
+
+A&& source() {static A a; return movel(a);}
+
+int test1()
+{
+ sa<sizeof(foo(source())) == 2 * sizeof(long)> t1;
+ return 0;
+}
+
+int main()
+{
+ return test1();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-104.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-104.C
new file mode 100644
index 0000000..50956d2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-104.C
@@ -0,0 +1,16 @@
+// PR c++/45236
+// { dg-do compile { target c++11 } }
+
+template <class T, class S> class foo;
+
+template<template<int...> class C, int... II, class S>
+struct foo<C<II...>,S>
+{
+ template <class U>
+ struct bar { typedef int type; };
+};
+
+template <int... I>
+struct A {};
+
+foo<A<3>, float>::bar<int> x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C
new file mode 100644
index 0000000..74e01ec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-bind.C
@@ -0,0 +1,475 @@
+// { dg-do run { target c++11 } }
+// A basic implementation of TR1's bind using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+#include <cassert>
+
+// Trivial reference_wrapper
+template<typename T>
+struct reference_wrapper
+{
+ reference_wrapper(T& x) : ptr(&x) { }
+
+ operator T&() const { return *ptr; }
+
+ T& get() const { return *ptr; }
+
+ T* ptr;
+};
+
+template<typename T> reference_wrapper<T> ref(T& x) { return x; }
+template<typename T> reference_wrapper<const T> cref(const T& x) { return x; }
+
+// Simple type-traits we'll need
+template<typename T>
+struct add_reference
+{
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&>
+{
+ typedef T& type;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+// For creating the constructor parameters of tuple<>
+template<typename T>
+struct add_const_reference
+{
+ typedef const T& type;
+};
+
+template<typename T>
+struct add_const_reference<T&>
+{
+ typedef T& type;
+};
+
+// 6.1.3 Class template tuple: Needed for bind() implementation
+template<typename... Values>
+class tuple;
+
+template<> class tuple<> { };
+
+template<typename Head, typename... Tail>
+class tuple<Head, Tail...>
+ : private tuple<Tail...>
+{
+ typedef tuple<Tail...> inherited;
+
+ public:
+ tuple() { }
+
+ // implicit copy-constructor is okay
+
+ tuple(typename add_const_reference<Head>::type v,
+ typename add_const_reference<Tail>::type... vtail)
+ : m_head(v), inherited(vtail...) { }
+
+ template<typename... VValues>
+ tuple(const tuple<VValues...>& other)
+ : m_head(other.head()), inherited(other.tail()) { }
+
+ template<typename... VValues>
+ tuple& operator=(const tuple<VValues...>& other)
+ {
+ m_head = other.head();
+ tail() = other.tail();
+ return *this;
+ }
+
+ typename add_reference<Head>::type head() { return m_head; }
+ typename add_reference<const Head>::type head() const { return m_head; }
+ inherited& tail() { return *this; }
+ const inherited& tail() const { return *this; }
+
+ protected:
+ Head m_head;
+};
+
+template<typename T>
+struct make_tuple_result
+{
+ typedef T type;
+};
+
+template<typename T>
+struct make_tuple_result<reference_wrapper<T> >
+{
+ typedef T& type;
+};
+
+// 6.1.3.2 Tuple creation functions
+struct ignore_t {
+ template<typename T> ignore_t& operator=(const T&) { return *this; }
+} ignore;
+
+template<typename... Values>
+tuple<typename make_tuple_result<Values>::type...>
+make_tuple(const Values&... values)
+{
+ return tuple<typename make_tuple_result<Values>::type...>(values...);
+}
+
+template<typename... Values>
+tuple<Values&...> tie(Values&... values)
+{
+ return tuple<Values&...>(values...);
+}
+
+// 6.1.3.3 Tuple helper classes
+template<typename Tuple>
+struct tuple_size;
+
+template<>
+struct tuple_size<tuple<> >
+{
+ static const __SIZE_TYPE__ value = 0;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_size<tuple<Head, Tail...> >
+{
+ static const __SIZE_TYPE__ value = 1 + tuple_size<tuple<Tail...> >::value;
+};
+
+template<int I, typename Tuple>
+struct tuple_element;
+
+template<int I, typename Head, typename... Tail>
+struct tuple_element<I, tuple<Head, Tail...> >
+{
+ typedef typename tuple_element<I-1, tuple<Tail...> >::type type;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_element<0, tuple<Head, Tail...> >
+{
+ typedef Head type;
+};
+
+// 6.1.3.4 Element access
+template<int I, typename Tuple>
+class get_impl;
+
+template<int I, typename Head, typename... Values>
+class get_impl<I, tuple<Head, Values...> >
+{
+ typedef typename tuple_element<I-1, tuple<Values...> >::type Element;
+ typedef typename add_reference<Element>::type RJ;
+ typedef typename add_const_reference<Element>::type PJ;
+ typedef get_impl<I-1, tuple<Values...> > Next;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+
+ static PJ get(const tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+};
+
+template<typename Head, typename... Values>
+class get_impl<0, tuple<Head, Values...> >
+{
+ typedef typename add_reference<Head>::type RJ;
+ typedef typename add_const_reference<Head>::type PJ;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t) { return t.head(); }
+ static PJ get(const tuple<Head, Values...>& t) { return t.head(); }
+};
+
+template<int I, typename... Values>
+typename add_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+template<int I, typename... Values>
+typename add_const_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(const tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+// 6.1.3.5 Relational operators
+inline bool operator==(const tuple<>&, const tuple<>&) { return true; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator==(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return t.head() == u.head() && t.tail() == u.tail();
+}
+
+template<typename... TValues, typename... UValues>
+bool operator!=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t == u);
+}
+
+inline bool operator<(const tuple<>&, const tuple<>&) { return false; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator<(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return (t.head() < u.head() ||
+ (!(t.head() < u.head()) && t.tail() < u.tail()));
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return u < t;
+}
+
+template<typename... TValues, typename... UValues>
+bool operator<=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(u < t);
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t < u);
+}
+
+// enable_if, the breakfast of champions
+template<bool Cond, typename Type = void>
+struct enable_if {
+ typedef Type type;
+};
+
+template<typename Type>
+struct enable_if<false, Type> { };
+
+// 3.6 Function object binders
+
+// 3.6.1 Class template is_bind_expression
+template<typename T>
+struct is_bind_expression {
+ static const bool value = false;
+};
+
+// 3.6.2 Class template is_placeholder
+template<typename T>
+struct is_placeholder {
+ static const int value = 0;
+};
+
+// 3.6.3 Function template bind
+template<int I> struct placeholder {} ;
+
+template<int N> struct int_c { };
+
+// A tuple of integer values
+template<int...> struct int_tuple {};
+
+// make_indexes_impl is a helper for make_indexes
+template<int I, typename IntTuple, typename... Types>
+struct make_indexes_impl;
+
+
+template<int I, int... Indexes, typename T, typename... Types>
+struct make_indexes_impl<I, int_tuple<Indexes...>, T, Types...>
+{
+ typedef typename make_indexes_impl<I+1,
+ int_tuple<Indexes..., I>,
+ Types...>::type type;
+};
+
+template<int I, int... Indexes>
+struct make_indexes_impl<I, int_tuple<Indexes...> > {
+ typedef int_tuple<Indexes...> type;
+};
+
+// make_indexes takes a variable-length number of N types and
+// generates an int_tuple that contains <0, 1, 2, ..., N-1>. These can
+// be used as indexes for tuple's get or tuple_element operation.
+template<typename... Types>
+struct make_indexes : make_indexes_impl<0, int_tuple<>, Types...> { };
+
+// Get the Ith tuple element, but only if I is in bounds.
+template<int I, typename Tuple, typename = void>
+struct safe_tuple_element{ };
+
+template<int I, typename... Values>
+struct safe_tuple_element<I, tuple<Values...>,
+ typename enable_if<(I >= 0 &&
+ I < tuple_size<tuple<Values...> >::value)
+ >::type>
+{
+ typedef typename tuple_element<I, tuple<Values...> >::type type;
+};
+
+// mu maps a bound argument to an actual argument, given a tuple of
+// the arguments passed to the function object returned by bind().
+
+// Return the stored reference from reference_wrapper
+template<typename T, typename... Args>
+inline T& mu(reference_wrapper<T>& bound_arg, const tuple<Args&...>&)
+{
+ return bound_arg.get();
+}
+
+// Unwrap a tuple into separate arguments and forward to the function
+// object f.
+template<typename F, int... Indexes, typename... Args>
+inline typename F::result_type
+unwrap_and_forward(F& f, int_tuple<Indexes...>, const tuple<Args&...>& args)
+{
+ return f(get<Indexes>(args)...);
+}
+
+// Evaluate the inner bind expression
+template<typename Bound, typename... Args>
+inline typename enable_if<is_bind_expression<Bound>::value,
+ typename Bound::result_type>::type
+mu(Bound& bound_arg, const tuple<Args&...>& args)
+{
+ typedef typename make_indexes<Args...>::type Indexes;
+ return unwrap_and_forward(bound_arg, Indexes(), args);
+}
+
+// Retrieve the Ith argument from args
+template<typename Bound, typename... Args>
+inline typename safe_tuple_element<is_placeholder<Bound>::value - 1,
+ tuple<Args...> >::type
+mu(Bound& bound_arg, const tuple<Args&...>& args)
+{
+ return get<is_placeholder<Bound>::value-1>(args);
+}
+
+// Return the stored value.
+template<typename T>
+struct is_reference_wrapper {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_reference_wrapper<reference_wrapper<T> > {
+ static const bool value = true;
+};
+
+template<typename Bound, typename... Args>
+inline typename enable_if<(!is_bind_expression<Bound>::value
+ && !is_placeholder<Bound>::value
+ && !is_reference_wrapper<Bound>::value),
+ Bound&>::type
+mu(Bound& bound_arg, const tuple<Args&...>&)
+{
+ return bound_arg;
+}
+
+//
+template<typename F, typename... BoundArgs, int... Indexes, typename... Args>
+typename F::result_type
+apply_functor(F& f, tuple<BoundArgs...>& bound_args, int_tuple<Indexes...>,
+ const tuple<Args&...>& args)
+{
+ return f(mu(get<Indexes>(bound_args), args)...);
+}
+
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ typedef typename make_indexes<BoundArgs...>::type indexes;
+
+ public:
+ typedef typename F::result_type result_type;
+
+ explicit bound_functor(const F& f, const BoundArgs&... bound_args)
+ : f(f), bound_args(bound_args...) { }
+
+ template<typename... Args>
+ typename F::result_type operator()(Args&... args) {
+ return apply_functor(f, bound_args, indexes(), tie(args...));
+ }
+
+ private:
+ F f;
+ tuple<BoundArgs...> bound_args;
+};
+
+template<typename F, typename... BoundArgs>
+struct is_bind_expression<bound_functor<F, BoundArgs...> > {
+ static const bool value = true;
+};
+
+template<typename F, typename... BoundArgs>
+inline bound_functor<F, BoundArgs...>
+bind(const F& f, const BoundArgs&... bound_args)
+{
+ return bound_functor<F, BoundArgs...>(f, bound_args...);
+}
+
+
+// 3.6.4 Placeholders
+template<int I>
+struct is_placeholder<placeholder<I> > {
+ static const int value = I;
+};
+
+placeholder<1> _1;
+placeholder<2> _2;
+placeholder<3> _3;
+placeholder<4> _4;
+placeholder<5> _5;
+placeholder<6> _6;
+placeholder<7> _7;
+placeholder<8> _8;
+placeholder<9> _9;
+
+// Test code
+template<typename T>
+struct plus {
+ typedef T result_type;
+
+ T operator()(T x, T y) { return x + y; }
+};
+
+template<typename T>
+struct multiplies {
+ typedef T result_type;
+
+ T operator()(T x, T y) { return x * y; }
+};
+
+template<typename T>
+struct negate {
+ typedef T result_type;
+
+ T operator()(T x) { return -x; }
+};
+
+int main()
+{
+ int seventeen = 17;
+ int forty_two = 42;
+
+ assert(bind(plus<int>(), _1, _2)(seventeen, forty_two) == 59);
+ assert(bind(plus<int>(), _1, _1)(seventeen, forty_two) == 34);
+ assert(bind(plus<int>(), _2, _1)(seventeen, forty_two) == 59);
+ assert(bind(plus<int>(), 5, _1)(seventeen, forty_two) == 22);
+ assert(bind(plus<int>(), ref(seventeen), _2)(seventeen, forty_two) == 59);
+ assert(bind(plus<int>(), bind(multiplies<int>(), 3, _1), _2)(seventeen, forty_two)
+ == 93);
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash1.C
new file mode 100644
index 0000000..211ede6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash1.C
@@ -0,0 +1,72 @@
+// { dg-do compile { target c++11 } }
+
+#define ONE
+#define TWO
+#define THREE
+
+struct Something {};
+Something ___;
+
+template <class F>
+struct Trial
+{
+ F f;
+public:
+ Trial() : f() {}
+ Trial( const F& ff ) : f(ff) { }
+ template <typename... Args>
+ struct Sig { typedef int ResultType; };
+
+ template <typename... Args>
+ struct Sig<Something,Args...> { typedef int ResultType; };
+
+#ifdef ONE
+
+template <typename... Args>
+typename Sig<Something,Args...>::ResultType operator()(const Something& s, const Args&... args) const
+{
+ return f(args...);
+}
+#endif
+#ifdef TWO
+template <typename... Args>
+typename Sig<Args...>::ResultType operator()(const Args&... args) const
+{
+ return f(args...);
+}
+#endif
+};
+
+struct Internal
+{
+
+template <typename... Args>
+struct Sig { typedef int ResultType; };
+
+template <typename... Args>
+struct Sig<Something,Args...> { typedef int ResultType; };
+
+template <typename... Args>
+int operator()(const Args&... args) const
+{
+ int n = sizeof...(Args);
+ return n;
+}
+
+ static Trial<Internal>& full() { static Trial<Internal> f; return f; }
+};
+
+static Trial<Internal>& internal = Internal::full();
+
+int main()
+{
+ int n = 0;
+#ifdef ONE
+ n = internal(___,1,2);
+#endif
+#ifdef THREE
+ n = internal(___,1,2,3);
+ n = internal(___,1,2,3,4);
+#endif
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C
new file mode 100644
index 0000000..8b5ee0d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-crash2.C
@@ -0,0 +1,17 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++/39637
+// { dg-do compile { target c++11 } }
+
+template<class... Types>
+void
+f(Types...)
+{
+ enum {e = sizeof(Types)}; // { dg-error "parameter packs not expanded with '...'" }
+ enum {e1 = sizeof...(Types)};
+}
+
+int
+main()
+{
+ f(0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-default.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-default.C
new file mode 100644
index 0000000..33b27a5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-default.C
@@ -0,0 +1,12 @@
+// PR c++/49205
+// { dg-do compile { target c++11 } }
+
+#include <initializer_list>
+
+struct A {
+ template<typename ...T> A(T...);
+ A(std::initializer_list<short>);
+ A(std::initializer_list<long>);
+};
+
+A a{};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-diag1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-diag1.C
new file mode 100644
index 0000000..53182d3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-diag1.C
@@ -0,0 +1,22 @@
+// PR c++/55232
+// { dg-do compile { target c++11 } }
+
+struct vector
+{
+ typedef int value_type;
+};
+
+template< class U, class... T >
+struct X
+{
+ void push_back( typename T::value_type ... vals )
+ {
+ U::asoeuth; // { dg-error "" }
+ }
+};
+
+int main()
+{
+ X< int, vector > x;
+ x.push_back( 0 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
new file mode 100644
index 0000000..b301604
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex1.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+template<typename ... Elements> class Tuple;
+Tuple<>* t; // OK: Elements is empty
+Tuple* u; // { dg-error "template-name" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
new file mode 100644
index 0000000..3df356a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<typename... Types> struct Tuple { };
+
+Tuple<> t0; // Types contains no arguments
+Tuple<int> t1; // Types contains one argument: int
+Tuple<int, float> t2; // Types contains two arguments: int and float
+Tuple<0> error; // { dg-error "mismatch" "mismatch" }
+// { dg-error "expected a type" "expected a type" { target *-*-* } 7 }
+// { dg-error "in declaration" "in declaration" { target *-*-* } 7 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C
new file mode 100644
index 0000000..9991fa2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex11.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<typename... Types>
+ void f(Types... args);
+
+void g() {
+ f(); // okay: args contains no arguments
+ f(1); // okay: args contains one int argument
+ (2, 1.0); // okay: args contains two arguments, an int and a double
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C
new file mode 100644
index 0000000..bc55b2d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex12.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename... Types>
+ void f(Types... rest);
+
+template<typename... Types>
+ void g(Types... rest) {
+ f(&rest...); // ``&rest...'' is a pack expansion, ``&rest'' is its pattern
+ }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C
new file mode 100644
index 0000000..fe29e71
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex13.C
@@ -0,0 +1,39 @@
+// { dg-do compile { target c++11 } }
+
+template<typename T, typename U> struct is_same {
+ static const bool value = false;
+};
+
+template<typename T> struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename...> struct Tuple {};
+template<typename T1, typename T2> struct Pair {};
+
+template<typename... Args1>
+ struct zip {
+ template<typename... Args2>
+ struct with {
+ typedef Tuple<Pair<Args1, Args2>...> type; // { dg-error "mismatched argument pack" }
+ };
+ };
+
+static_assert
+ (is_same<zip<short, int>::with<unsigned short, unsigned>::type,
+ Tuple<Pair<short, unsigned short>, Pair<int, unsigned> > >::value,
+ "zip");
+
+typedef zip<short>::with<unsigned short, unsigned>::type T2; // error: different number of arguments specified
+ // for Args1 and Args2
+
+template<typename... Args> void f(Args...);
+
+template<typename... Args> void g(Args... args)
+{
+ f(const_cast<const Args*>(&args)...); // okay: ``Args'' and ``args'' are expanded
+ f(5 ...); // { dg-error "contains no argument packs" }
+ f(args); // { dg-error "parameter packs not expanded" }
+ // { dg-message "args" "note" { target *-*-* } 36 }
+ f(h(args...) + args...); // okay: first ``args'' expanded within h, second ``args'' expanded within f.
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
new file mode 100644
index 0000000..600b798
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+template<class T> class A { /* ... */ };
+template<class T, class U = T> class B { /* ... */ };
+template<class... Types> class C { /* ... */ };
+
+template<template<class> class P> class X { /* ... */ };
+template<template<class...> class Q> class Y { /* ... */ };
+
+X<A> xA; // okay
+X<B> xB; // { dg-error "mismatch" "mismatch" }
+// { dg-error "expected a template" "expected" { target *-*-* } 11 }
+// { dg-error "invalid type" "invalid" { target *-*-* } 11 }
+X<C> xC; // { dg-error "mismatch" "mismatch" }
+// { dg-error "expected a template" "expected" { target *-*-* } 14 }
+// { dg-error "invalid type" "invalid" { target *-*-* } 14 }
+Y<A> yA;
+Y<B> yB;
+Y<C> yC; // okay
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C
new file mode 100644
index 0000000..015d9d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex2.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<class... Types> struct B { // { dg-error "declaration of" }
+ void f3();
+ void f4();
+};
+
+template<class... Types> void B<Types...>::f3() { } // OK
+template<class... Types> void B<Types>::f4() { } // { dg-error "invalid" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
new file mode 100644
index 0000000..8a723ab
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<class X, class Y, class... Z> X f(Y); // { dg-message "note" }
+void g()
+{
+ int i = f<int>(5.6);
+ int j = f(5.6); // { dg-error "no matching" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
+ f<void>(f<int, bool>);
+ f<void>(f<int>); // { dg-error "no matching" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 9 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
new file mode 100644
index 0000000..26651f7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+template<class X, class Y, class Z> X f(Y,Z); // { dg-message "note" }
+template<class... Args> void f2();
+void g()
+{
+ f<int,const char*,double>("aa",3.0);
+ f<int,const char*>("aa",3.0); // Z is deduced to be double
+ f<int>("aa",3.0); // Y is deduced to be char*, and
+ // Z is deduced to be double
+ f("aa",3.0); // { dg-error "no matching" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 10 }
+ f2<char, short, int, long>(); // okay
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C
new file mode 100644
index 0000000..841562f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex5.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename... Types> void f(Types... values);
+
+void g()
+{
+ f<int*, float*>(0, 0, 0); // Types is deduced to the sequence int*, float*, int
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C
new file mode 100644
index 0000000..185a963
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex6.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+template<class...> struct Tuple { };
+
+template<class... Types> void f(Types&...);
+template<class... Types1, class... Types2> void g(Tuple<Types1...>, Tuple<Types2...>);
+
+void h(int x, float& y)
+{
+ const int z = x;
+ f(x, y, z); // Types is deduced to int, const int, float
+ g(Tuple<short, int, long>(), Tuple<float, double>()); // Types1 is deduced to short, int long
+ // Types2 is deduced to float, double
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C
new file mode 100644
index 0000000..c1bf837
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex7.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct Tuple { };
+template<typename... Types> char& g(Tuple<Types...>); // #1
+template<typename T1, typename... Types> short& g(Tuple<T1, Types...>); // #2
+template<typename T1, typename... Types> int& g(Tuple<T1, Types&...>); // #3
+
+void f() {
+ // char& x1 = g(Tuple<>()); // calls #1
+ short& y1 = g(Tuple<int, float>()); // calls #2
+ // int& z1 = g(Tuple<int, float&>()); // calls #3
+ // int& z2 = g(Tuple<int>()); // calls #3
+ // int& z3 = g(Tuple<int>()); // calls #3
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C
new file mode 100644
index 0000000..581e4db
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex8.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+template<class> struct X { static const bool primary = true; };
+template<class R, class... ArgTypes> struct X<R(int, ArgTypes...)> {
+ static const bool primary = false;
+};
+template<class... Types> struct Y { static const bool primary = true; };
+template<class T, class... Types> struct Y<T, Types&...> {
+ static const bool primary = false;
+};
+
+static_assert (X<int>::primary, "uses primary template");
+static_assert (!X<int(int, float, double)>::primary,
+ "uses partial specialization");
+static_assert (X<int(float, int)>::primary, "uses primary template");
+static_assert (Y<>::primary, "uses primary template");
+static_assert (!Y<int&, float&, double&>::primary,
+ "uses partial specialization");
+static_assert (Y<int, float, double>::primary, "uses primary template");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C
new file mode 100644
index 0000000..0617b1a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ex9.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args> char& f(Args... args); // #1
+template<typename T1, typename... Args> short& f(T1 a1, Args... args); // #2
+template<typename T1, typename T2> int& f(T1 a2, T2 a3); // #3
+
+void g() {
+ char& x = f(); // calls #1
+ short& y = f(1, 2, 3); // calls #2
+ int& z = f(1, 2); // calls #3
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C
new file mode 100644
index 0000000..605c55b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+template<class T, class U> struct A { };
+template<class... T, class ... U> void f( A<T,U>... p);
+
+void g() {
+ f<int>(
+ A<int,unsigned>(),
+ A<short,unsigned short>()
+ );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C
new file mode 100644
index 0000000..4a80745
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C
@@ -0,0 +1,14 @@
+// PR c++/56774
+// { dg-require-effective-target c++11 }
+
+template <class ... Args>
+struct mytype {};
+
+template <class T, class ... Args>
+void something( mytype<T, Args...> )
+{ }
+
+int main()
+{
+ something<int, char, bool>( mytype<int, char, bool>() );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-function.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-function.C
new file mode 100644
index 0000000..bb98531
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-function.C
@@ -0,0 +1,95 @@
+// { dg-do run { target c++11 } }
+// A basic implementation of TR1's function using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+#include <cassert>
+
+template<typename Signature>
+class function;
+
+template<typename R, typename... Args>
+class invoker_base
+{
+ public:
+ virtual ~invoker_base() { }
+ virtual R invoke(Args...) = 0;
+ virtual invoker_base* clone() = 0;
+};
+
+template<typename F, typename R, typename... Args>
+class functor_invoker : public invoker_base<R, Args...>
+{
+ public:
+ explicit functor_invoker(const F& f) : f(f) { }
+ R invoke(Args... args) { return f(args...); }
+ functor_invoker* clone() { return new functor_invoker(f); }
+
+ private:
+ F f;
+};
+
+template<typename R, typename... Args>
+class function<R (Args...)> {
+ public:
+ typedef R result_type;
+
+ function() : invoker (0) { }
+
+ function(const function& other) : invoker(0) {
+ if (other.invoker)
+ invoker = other.invoker->clone();
+ }
+
+ template<typename F>
+ function(const F& f) : invoker(0) {
+ invoker = new functor_invoker<F, R, Args...>(f);
+ }
+
+ ~function() {
+ if (invoker)
+ delete invoker;
+ }
+
+ function& operator=(const function& other) {
+ function(other).swap(*this);
+ return *this;
+ }
+
+ template<typename F>
+ function& operator=(const F& f) {
+ function(f).swap(*this);
+ return *this;
+ }
+
+ void swap(function& other) {
+ invoker_base<R, Args...>* tmp = invoker;
+ invoker = other.invoker;
+ other.invoker = tmp;
+ }
+
+ result_type operator()(Args... args) const {
+ assert(invoker);
+ return invoker->invoke(args...);
+ }
+
+ private:
+ invoker_base<R, Args...>* invoker;
+};
+
+struct plus {
+ template<typename T> T operator()(T x, T y) { return x + y; }
+};
+
+struct multiplies {
+ template<typename T> T operator()(T x, T y) { return x * y; }
+};
+
+int main()
+{
+ function<int(int, int)> f1 = plus();
+ assert(f1(3, 5) == 8);
+
+ f1 = multiplies();
+ assert(f1(3, 5) == 15);
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-init.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-init.C
new file mode 100644
index 0000000..ac072c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-init.C
@@ -0,0 +1,55 @@
+// { dg-do run { target c++11 } }
+
+// PR c++/33510
+#define SIZE_FROM_CTOR
+extern "C" void abort ();
+
+template<int M, int N> struct pair
+{
+ int i, j;
+ pair () : i (M), j (N) {}
+};
+
+template<int... M> struct S
+{
+ template<int... N> static int *foo ()
+ {
+#ifdef SIZE_FROM_CTOR
+ static int x[] = { (M + N)..., -1 };
+#else
+ static int x[1 + sizeof... N] = { (M + N)..., -1 };
+#endif
+ return x;
+ }
+};
+
+template<typename... M> struct R
+{
+ template<typename... N> static int *foo ()
+ {
+#ifdef SIZE_FROM_CTOR
+ static int x[] = { (sizeof(M) + sizeof(N))..., -1 };
+#else
+ static int x[1 + sizeof... N] = { (sizeof(M) + sizeof(N))..., -1 };
+#endif
+ return x;
+ }
+};
+
+int *bar ()
+{
+ return S<0, 1, 2>::foo<0, 1, 2> ();
+}
+
+int *baz ()
+{
+ return R<char, short, int>::foo<float, double, long> ();
+}
+
+
+int main ()
+{
+ int *p = bar ();
+ if (p[0] != 0 || p[1] != 2 || p[2] != 4 || p[3] != -1)
+ abort ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-lambda.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-lambda.C
new file mode 100644
index 0000000..f235c36
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-lambda.C
@@ -0,0 +1,79 @@
+// { dg-do compile { target c++11 } }
+
+struct int_placeholder;
+
+template<typename T>
+struct do_replace
+{
+ typedef T type;
+};
+
+template<>
+struct do_replace<int_placeholder>
+{
+ typedef int type;
+};
+
+template<typename T> struct lambdalike
+{
+ typedef T type;
+};
+
+template<template<typename...> class TT, typename... Args>
+struct lambdalike<TT<Args...> > {
+ typedef TT<typename do_replace<Args>::type...> type;
+};
+
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+template<typename... Elements> struct tuple;
+template<typename T1, typename T2> struct pair;
+
+static_assert(is_same<lambdalike<tuple<float, int_placeholder, double>>::type,
+ tuple<float, int, double>>::value,
+ "MPL lambda-like replacement on tuple");
+static_assert(is_same<lambdalike<pair<float, int_placeholder>>::type,
+ pair<float, int>>::value,
+ "MPL lambda-like replacement on pair");
+
+
+struct _1 {};
+
+template<typename Arg0, typename Lambda>
+struct eval
+{
+ typedef Lambda type;
+};
+
+template<typename Arg0>
+struct eval<Arg0, _1>
+{
+ typedef Arg0 type;
+};
+
+template<typename Arg0, template<typename...> class T, typename... Pack>
+struct eval<Arg0, T<Pack...> >
+{
+ typedef T< typename eval<Arg0, Pack>::type... > type;
+};
+
+static_assert(is_same<eval<int, tuple<float, _1, double>>::type,
+ tuple<float, int, double>>::value, "eval tuple");
+static_assert(is_same<eval<int, pair<_1, double>>::type,
+ pair<int, double>>::value, "eval pair");
+static_assert(is_same<eval<int,
+ tuple<pair<_1, _1>, pair<float, float>,
+ pair<double, _1>>>::type,
+ tuple<pair<int, int>, pair<float, float>, pair<double, int>>>::value,
+ "recursive eval");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C
new file mode 100644
index 0000000..aca58e3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn.C
@@ -0,0 +1,49 @@
+// { dg-do run { target c++11 } }
+// A basic implementation of TR1's mem_fn using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+#include <cassert>
+
+template<typename R, typename Class, typename... Args>
+class Mem_fn
+{
+ public:
+ explicit Mem_fn(R (Class::*pmf)(Args...)) : pmf(pmf) { }
+
+ R operator()(Class& object, Args... args)
+ {
+ return (object.*pmf)(args...);
+ }
+
+ R operator()(Class* object, Args... args)
+ {
+ return (object->*pmf)(args...);
+ }
+
+ R (Class::*pmf)(Args...);
+};
+
+template<typename R, typename Class, typename... Args>
+inline Mem_fn<R, Class, Args...>
+mem_fn(R (Class::* pmf)(Args...))
+{
+ return Mem_fn<R, Class, Args...>(pmf);
+}
+
+class X {
+ public:
+ int negate(int x) { return -x; }
+ int plus(int x, int y) { return x + y; }
+};
+
+int main()
+{
+ X x;
+ X* xp = &x;
+
+ assert(mem_fn(&X::negate)(x, 17) == -17);
+ assert(mem_fn(&X::negate)(xp, 17) == -17);
+ assert(mem_fn(&X::plus)(x, 17, 25) == 42);
+ assert(mem_fn(&X::plus)(xp, 17, 25) == 42);
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new.C
new file mode 100644
index 0000000..af7c86f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new.C
@@ -0,0 +1,18 @@
+// { dg-do run { target c++11 } }
+// Contributed by Peter Dimov
+// PR c++/32597
+#include <assert.h>
+#include <new>
+
+int k = 5;
+
+template< class... Args > void f( Args... args )
+{
+ new( &k ) int( args... );
+}
+
+int main()
+{
+ f();
+ assert( k == 0 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new2.C
new file mode 100644
index 0000000..413e070
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-new2.C
@@ -0,0 +1,23 @@
+// { dg-do run { target c++11 } }
+// PR c++/32597
+#include <assert.h>
+#include <new>
+
+template< class... Args > void f( Args... args )
+{
+ {
+ int x = 17;
+ (void)x;
+ }
+
+ {
+ int y(args...);
+ assert(y == 0);
+ }
+
+}
+
+int main()
+{
+ f();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C
new file mode 100644
index 0000000..4aa5dba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+template <class... T>
+void f(T..., int, T...) { }
+
+int main()
+{
+ f(0);
+ f<int>(0,0,0);
+ f<int,int>(0,0,0,0,0);
+ f(0,0,0); // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce2.C
new file mode 100644
index 0000000..a82a098
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce2.C
@@ -0,0 +1,25 @@
+// PR c++/55220
+// { dg-do compile { target c++11 } }
+
+template <typename ...> struct something_like_tuple
+{
+
+};
+
+template <typename, typename> struct is_last
+{
+ static const bool value = false;
+};
+
+// Head is non-deducible, so this can't work as the user intended
+template <typename T, template <typename ...> class Tuple, typename ... Head>
+struct is_last<T, Tuple<Head ..., T>>
+{
+ static const bool value = true;
+};
+
+#define SA(X) static_assert (X, #X)
+
+typedef something_like_tuple<char, int, float> something_like_tuple_t;
+SA ((is_last<float, something_like_tuple_t>::value == false));
+SA ((is_last<int, something_like_tuple_t>::value == false));
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-rref.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-rref.C
new file mode 100644
index 0000000..ee90c9b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-rref.C
@@ -0,0 +1,36 @@
+// { dg-do compile { target c++11 } }
+// PR c++/33939
+template<typename T>
+struct refs_only;
+
+template<typename T>
+struct refs_only<T &>
+{};
+
+template<typename T>
+refs_only<T> foo( T && t)
+{
+ return refs_only<T>();
+}
+
+template<typename... T>
+struct va_refs_only;
+
+template<typename T>
+struct va_refs_only<T>
+ : refs_only<T>
+{};
+
+template<typename... T>
+va_refs_only<T...> bar( T &&... t)
+{
+ return va_refs_only<T...>();
+}
+
+int main()
+{
+ int j = 0;
+ foo(j);
+ bar(j); // error: invalid use of incomplete type 'struct refs_only<int>'
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof1.C
new file mode 100644
index 0000000..2837c85
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof1.C
@@ -0,0 +1,11 @@
+// PR c++/56679
+// { dg-require-effective-target c++11 }
+
+template <template <typename> class... Args>
+struct Foo {
+ static const int value = sizeof...(Args);
+};
+
+template <typename> struct Bar { };
+
+const int test = Foo<Bar>::value;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C
new file mode 100644
index 0000000..dfc245d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof2.C
@@ -0,0 +1,14 @@
+// PR c++/57471
+// { dg-require-effective-target c++11 }
+
+struct A
+{
+ static constexpr bool value = true;
+};
+
+template<typename... Types>
+struct B
+{
+ static_assert(A::value, "");
+ static_assert(sizeof...(Types) == 0, "");
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C
new file mode 100644
index 0000000..7296500
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-sizeof3.C
@@ -0,0 +1,15 @@
+// PR c++/59435
+// { dg-require-effective-target c++11 }
+
+template <typename... E>
+struct T
+{
+ T(unsigned int i = sizeof...(E)){} // does not compile
+
+ static constexpr unsigned int U = sizeof...(E);
+ T(unsigned int j, unsigned int i = U){} // compile
+};
+
+template <typename... T>
+void test(int i = sizeof...(T)) // compile
+{}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-throw.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-throw.C
new file mode 100644
index 0000000..fc81e9d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-throw.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+// PR c++/33509
+template<int M, int N> struct pair
+{
+ int i, j;
+ pair() : i(M), j(N) {}
+};
+
+template<int... M> struct S
+{
+ template<int... N> static int foo() throw (pair <M, N>...) // { dg-error "mismatched" }
+ {
+ return 1;
+ }
+};
+
+int bar ()
+{
+ return S<0, 1, 2>::foo<0, 1, 3> ();
+}
+
+int wibble()
+{
+ return S<0, 1, 2>::foo<0, 1> (); // { dg-error "no matching" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ttp.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ttp.C
new file mode 100644
index 0000000..5d08d13
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-ttp.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+// PR c++/34101
+template<typename> struct A {};
+
+template<template<typename> class...> struct B {};
+
+template<template<typename> class T> void foo(const B<T>&);
+
+void bar()
+{
+ foo(B<A>());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C
new file mode 100644
index 0000000..b1c6b3d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-tuple.C
@@ -0,0 +1,293 @@
+// { dg-do run { target c++11 } }
+// An implementation of TR1's <tuple> using variadic teplates
+// Contributed by Douglas Gregor <doug.gregor@gmail.com>
+
+#include <string>
+#include <cassert>
+#include <cstring>
+
+// Trivial reference_wrapper
+template<typename T>
+struct reference_wrapper
+{
+ reference_wrapper(T& x) : ptr(&x) { }
+
+ operator T&() const { return *ptr; }
+
+ T* ptr;
+};
+
+template<typename T> reference_wrapper<T> ref(T& x) { return x; }
+template<typename T> reference_wrapper<const T> cref(const T& x) { return x; }
+
+// Simple type-traits we'll need
+template<typename T>
+struct add_reference
+{
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&>
+{
+ typedef T& type;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+// For creating the constructor parameters of tuple<>
+template<typename T>
+struct add_const_reference
+{
+ typedef const T& type;
+};
+
+template<typename T>
+struct add_const_reference<T&>
+{
+ typedef T& type;
+};
+
+// 6.1.3 Class template tuple
+template<typename... Values>
+class tuple;
+
+template<> class tuple<> { };
+
+template<typename Head, typename... Tail>
+class tuple<Head, Tail...>
+ : private tuple<Tail...>
+{
+ typedef tuple<Tail...> inherited;
+
+ public:
+ tuple() { }
+
+ // implicit copy-constructor is okay
+
+ tuple(typename add_const_reference<Head>::type v,
+ typename add_const_reference<Tail>::type... vtail)
+ : m_head(v), inherited(vtail...) { }
+
+ template<typename... VValues>
+ tuple(const tuple<VValues...>& other)
+ : m_head(other.head()), inherited(other.tail()) { }
+
+ template<typename... VValues>
+ tuple& operator=(const tuple<VValues...>& other)
+ {
+ m_head = other.head();
+ tail() = other.tail();
+ return *this;
+ }
+
+ typename add_reference<Head>::type head() { return m_head; }
+ typename add_reference<const Head>::type head() const { return m_head; }
+ inherited& tail() { return *this; }
+ const inherited& tail() const { return *this; }
+
+ protected:
+ Head m_head;
+};
+
+template<typename T>
+struct make_tuple_result
+{
+ typedef T type;
+};
+
+template<typename T>
+struct make_tuple_result<reference_wrapper<T> >
+{
+ typedef T& type;
+};
+
+// 6.1.3.2 Tuple creation functions
+struct ignore_t {
+ template<typename T> ignore_t& operator=(const T&) { return *this; }
+} ignore;
+
+template<typename... Values>
+tuple<typename make_tuple_result<Values>::type...>
+make_tuple(const Values&... values)
+{
+ return tuple<typename make_tuple_result<Values>::type...>(values...);
+}
+
+template<typename... Values>
+tuple<Values&...> tie(Values&... values)
+{
+ return tuple<Values&...>(values...);
+}
+
+// 6.1.3.3 Tuple helper classes
+template<typename Tuple>
+struct tuple_size;
+
+template<>
+struct tuple_size<tuple<> >
+{
+ static const std::size_t value = 0;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_size<tuple<Head, Tail...> >
+{
+ static const std::size_t value = 1 + tuple_size<tuple<Tail...> >::value;
+};
+
+template<int I, typename Tuple>
+struct tuple_element;
+
+template<int I, typename Head, typename... Tail>
+struct tuple_element<I, tuple<Head, Tail...> >
+{
+ typedef typename tuple_element<I-1, tuple<Tail...> >::type type;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_element<0, tuple<Head, Tail...> >
+{
+ typedef Head type;
+};
+
+// 6.1.3.4 Element access
+template<int I, typename Tuple>
+class get_impl;
+
+template<int I, typename Head, typename... Values>
+class get_impl<I, tuple<Head, Values...> >
+{
+ typedef typename tuple_element<I-1, tuple<Values...> >::type Element;
+ typedef typename add_reference<Element>::type RJ;
+ typedef typename add_const_reference<Element>::type PJ;
+ typedef get_impl<I-1, tuple<Values...> > Next;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+
+ static PJ get(const tuple<Head, Values...>& t)
+ { return Next::get(t.tail()); }
+};
+
+template<typename Head, typename... Values>
+class get_impl<0, tuple<Head, Values...> >
+{
+ typedef typename add_reference<Head>::type RJ;
+ typedef typename add_const_reference<Head>::type PJ;
+
+ public:
+ static RJ get(tuple<Head, Values...>& t) { return t.head(); }
+ static PJ get(const tuple<Head, Values...>& t) { return t.head(); }
+};
+
+template<int I, typename... Values>
+typename add_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+template<int I, typename... Values>
+typename add_const_reference<
+ typename tuple_element<I, tuple<Values...> >::type
+ >::type
+get(const tuple<Values...>& t)
+{
+ return get_impl<I, tuple<Values...> >::get(t);
+}
+
+// 6.1.3.5 Relational operators
+inline bool operator==(const tuple<>&, const tuple<>&) { return true; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator==(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return t.head() == u.head() && t.tail() == u.tail();
+}
+
+template<typename... TValues, typename... UValues>
+bool operator!=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t == u);
+}
+
+inline bool operator<(const tuple<>&, const tuple<>&) { return false; }
+
+template<typename T, typename... TTail, typename U, typename... UTail>
+bool operator<(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
+{
+ return (t.head() < u.head() ||
+ (!(t.head() < u.head()) && t.tail() < u.tail()));
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return u < t;
+}
+
+template<typename... TValues, typename... UValues>
+bool operator<=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(u < t);
+}
+
+template<typename... TValues, typename... UValues>
+bool operator>=(const tuple<TValues...>& t, const tuple<UValues...>& u)
+{
+ return !(t < u);
+}
+
+int a0[tuple_size<tuple<> >::value == 0? 1 : -1];
+int a1[tuple_size<tuple<int, float, double> >::value == 3? 1 : -1];
+int a2a[is_same<tuple_element<0, tuple<int, float, double> >::type, int>
+ ::value? 1 : -1];
+int a2b[is_same<tuple_element<1, tuple<int, float, double> >::type, float>
+ ::value? 1 : -1];
+int a2c[is_same<tuple_element<2, tuple<int, float, double> >::type, double>
+ ::value? 1 : -1];
+
+int main()
+{
+ tuple<> t0;
+ tuple<int> t1(1);
+ tuple<int, float> t2(1, 3.14159f);
+ tuple<int, float, const char*> t3a(1, 3.14159f, "Hello, world!");
+ tuple<long, double, std::string> t3b(t3a);
+ t3b = t3a;
+ // t3a = t3b; DPG: triggers an error, as it should.
+
+ tuple<int, float, std::string> t3c =
+ make_tuple(17, 2.718281828, std::string("Fun"));
+
+ int seventeen = 17;
+ double pi = 3.14159;
+ tuple<int&, double&> seventeen_pi = make_tuple(ref(seventeen), ref(pi));
+ tuple<int&, const double&> seventeen_pi2 =
+ make_tuple(ref(seventeen), cref(pi));
+ tuple<int&, double&> seventeen_pi_tied = tie(seventeen, pi);
+ assert(get<0>(t3a) == 1);
+ assert(get<1>(t3a) == 3.14159f);
+ assert(std::strcmp(get<2>(t3a), "Hello, world!") == 0);
+
+ assert(t3a == t3b);
+ assert(!(t3a != t3b));
+ assert(!(t3a < t3b));
+ assert(!(t3a > t3b));
+ assert(t3a <= t3b && t3b <= t3a);
+ assert(t3a >= t3b && t3b >= t3a);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify-2.C
new file mode 100644
index 0000000..0a7acba
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify-2.C
@@ -0,0 +1,13 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++/40155
+// { dg-do compile { target c++11 } }
+
+template <typename T> struct identity
+{ typedef T type; };
+
+template <typename RT, typename... A>
+int forward_call(RT (*) (A...), typename identity<A>::type...);
+
+int g (double);
+
+int i = forward_call(&g, 0);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify.C
new file mode 100644
index 0000000..29b528c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unify.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct tuple { };
+
+template<typename... Args1, typename... Args2>
+void foo(tuple<Args1..., Args2...>, tuple<Args1...>, tuple<Args2...>);
+
+struct X{ };
+
+void bar()
+{
+ tuple<int, float> tif;
+ tuple<double, X> tdx;
+ tuple<int, float, double, X> tall;
+ foo(tall, tif, tdx);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C
new file mode 100644
index 0000000..263640d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-unresolved.C
@@ -0,0 +1,12 @@
+// PR c++/50086
+// { dg-do compile { target c++11 } }
+
+template<typename T> void tfun();
+template<typename T> void fun1(T);
+template<typename... Types> void fun2(Types... args);
+
+int main()
+{
+ fun1(tfun<int>); // ok
+ fun2(tfun<int>); // error: unresolved overloaded function type
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C
new file mode 100644
index 0000000..179919a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C
@@ -0,0 +1,24 @@
+// PR c++/52796
+// { dg-do run { target c++11 } }
+
+inline void *operator new(__SIZE_TYPE__ s, void *p) { return p; }
+
+struct A
+{
+ int i;
+ template<class... Ts>
+ A(Ts&&... ts): i(ts...) { }
+};
+
+static union {
+ unsigned char c[sizeof(A)];
+ int i;
+};
+
+int main()
+{
+ i = 0xdeadbeef;
+ new(c) A;
+ if (i != 0)
+ __builtin_abort();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic1.C
new file mode 100644
index 0000000..ed80849
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic1.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename...>
+class tuple;
+
+template<typename... Args>
+class tuple { };
+
+template<typename T1, class... Args>
+class tuple1p { };
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic10.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic10.C
new file mode 100644
index 0000000..03fa39c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic10.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+template<typename T1, typename T2>
+struct pair {};
+
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<>
+struct tuple<pair<int, float> > { };
+
+template<typename... Outer>
+struct X {
+ template<typename... Inner>
+ struct Y
+ {
+ typedef tuple<pair<Outer, Inner>...> type; // { dg-error "mismatched argument pack lengths" }
+ };
+};
+
+X<int, double>::Y<short, char, double>::type honk;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic100.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic100.C
new file mode 100644
index 0000000..502601f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic100.C
@@ -0,0 +1,15 @@
+// PR c++/43143
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+T&& declval();
+
+template<class T, class... Args>
+void test() {
+ T t(declval<Args>()...);
+}
+
+int main() {
+ test<const int>(); // OK
+ test<int[23]>(); // Error
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic101.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic101.C
new file mode 100644
index 0000000..8bcedff
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic101.C
@@ -0,0 +1,23 @@
+// PR c++/43382
+// { dg-do compile { target c++11 } }
+
+template<class T>
+struct Container
+{ T f() const; };
+
+template<class T>
+T deref(const T& t)
+{ return t; }
+
+
+template <class T, class... Args>
+auto
+deref(const T& u, int r, Args... args)
+-> decltype(deref(u.f(), args...))
+{ return deref(u.f(), args...); }
+
+int main(void)
+{
+ Container<Container<int>> v;
+ deref(v,1,2);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic102.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic102.C
new file mode 100644
index 0000000..9214b01
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic102.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+
+struct nAny {
+ template<class... T>
+ nAny(T&&...);
+};
+
+template<class T>
+T&& create();
+
+template<class T, class... Args>
+void test() {
+ T t(create<Args>()...);
+ (void) t;
+}
+
+int main() {
+ test<nAny>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic103.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic103.C
new file mode 100644
index 0000000..69510e6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic103.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& create();
+
+template<class T, class... Args>
+void test() {
+ T t(create<Args>()...); // { dg-error "incomplete" }
+ (void) t;
+}
+
+int main() {
+ test<int[]>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic105.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic105.C
new file mode 100644
index 0000000..4ba384c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic105.C
@@ -0,0 +1,25 @@
+// PR c++/47289
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+
+template <template <typename... __ARGS> class _F, typename... _ARGS>
+auto reverse (_ARGS... args) -> decltype(_F<_ARGS...>::call_function(args...)) {
+ return _F<_ARGS...>::call_function(args...);
+}
+
+template <typename _T>
+_T sum(_T x) { return x; }
+
+template <typename _T, typename... _ARGS>
+_T sum(_T x, _ARGS... args) { return x + sum(args...); }
+
+template <typename _T, typename... _ARGS>
+struct call_sum {
+ static _T call_function(_T x1, _ARGS... args) { return sum(x1, args...); }
+};
+
+int main() {
+ // This shouldn't be an error; this is bug 35722.
+ reverse<call_sum>(1,2); // { dg-bogus "no match" "" }
+ // { dg-bogus "sorry, unimplemented" "candidate explanation" { target *-*-* } 6 }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic106.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic106.C
new file mode 100644
index 0000000..efa4c34
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic106.C
@@ -0,0 +1,21 @@
+// Origin: PR c++/47326
+// { dg-do compile { target c++11 } }
+
+template <int _N>
+struct A
+{
+ typedef int value_type;
+};
+
+template <typename... _ARGS>
+auto
+f (_ARGS... args) -> typename A<sizeof...(args)>::value_type
+{
+ return 12;
+}
+
+int
+main()
+{
+ f(1,2);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic107.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic107.C
new file mode 100644
index 0000000..d22f87c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic107.C
@@ -0,0 +1,15 @@
+// PR c++/48451
+// { dg-do compile { target c++11 } }
+
+namespace std {
+ template <class T> T&& declval();
+}
+
+template<class T, class... Args,
+ class = decltype(T(std::declval<Args>()...))
+ >
+char f(int);
+
+struct From2Ints { From2Ints(int, int); };
+
+static_assert(sizeof(f<From2Ints, int, int>(0)) == 1, "Error"); // b
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic108.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic108.C
new file mode 100644
index 0000000..2e396c6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic108.C
@@ -0,0 +1,10 @@
+// PR c++/48736
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& create();
+
+template<class T, class... Args,
+ class = decltype(T{create<Args>()...}) // Line X
+>
+char f(int);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic109.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic109.C
new file mode 100644
index 0000000..3ecfb73
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic109.C
@@ -0,0 +1,17 @@
+// PR c++/48292
+// { dg-do compile { target c++11 } }
+
+template <typename... Args> int g(Args...);
+
+template <int N = 0>
+struct A
+{
+ template <typename... Args>
+ static auto f(Args... args) -> decltype(g(args...));
+};
+
+int main()
+{
+ A<>::f();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic11.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic11.C
new file mode 100644
index 0000000..2bdeb32
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic11.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct count;
+
+template<>
+struct count<> {
+ static const int value = 0;
+};
+
+template<typename T, typename... Args>
+struct count<T, Args...> {
+ static const int value = 1 + count<Args...>::value;
+};
+
+int a0[count<>::value == 0? 1 : -1];
+int a1[count<char>::value == 1? 1 : -1];
+int a2[count<char, short>::value == 2? 1 : -1];
+int a3[count<char, short, int>::value == 3? 1 : -1];
+int a4[count<char, short, int, long>::value == 4? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic110.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic110.C
new file mode 100644
index 0000000..47a9ed9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic110.C
@@ -0,0 +1,15 @@
+// PR c++/45698
+// { dg-do compile { target c++11 } }
+
+template <class... Ts> struct tuple { };
+
+template<class... Ts>
+struct A {
+ template<typename T> struct N { };
+ tuple<N<Ts>...> tup;
+};
+
+int main()
+{
+ A<int, double> a;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic111.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic111.C
new file mode 100644
index 0000000..09bac28
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic111.C
@@ -0,0 +1,20 @@
+// PR c++/48424
+// { dg-do compile { target c++11 } }
+// { dg-options "-fabi-version=0" }
+
+template<typename... Args1>
+struct S
+{
+ template<typename... Args2>
+ void f(Args1... args1, Args2&&... args2)
+ {
+ }
+};
+
+int main()
+{
+ S<int, double> s;
+ s.f(1,2.0,false,'a');
+}
+
+// { dg-final { scan-assembler "_ZN1SIJidEE1fIJbcEEEvidDpOT_" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic112.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic112.C
new file mode 100644
index 0000000..50d7e94
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic112.C
@@ -0,0 +1,19 @@
+// PR c++/49420
+// { dg-do compile { target c++11 } }
+
+struct A { };
+
+template <class T> struct B
+{
+ typedef typename T::type type ; // { dg-error "no type" }
+};
+
+template <typename Array, typename... Args>
+typename B<Array>::type
+get(const Array& a, Args... args);
+
+int main()
+{
+ A a;
+ int x = get(a, 1, 2, 3); // { dg-error "no match" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic113.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic113.C
new file mode 100644
index 0000000..8f02fed
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic113.C
@@ -0,0 +1,21 @@
+// PR c++/49251
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wunused-parameter" }
+
+struct A {};
+template <int> int f(A);
+
+template< int... Indices >
+struct indices {};
+
+template< class... Args >
+void sink( Args&&... ) {}
+
+template< class T, int... Indices >
+void unpack_test( T && t, indices<Indices...> ) {
+ sink( f<Indices>(t)... );
+}
+
+int main() {
+ unpack_test( A(), indices<>() );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic114.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic114.C
new file mode 100644
index 0000000..82ffe83
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic114.C
@@ -0,0 +1,27 @@
+// PR c++/49785
+// { dg-do compile { target c++11 } }
+
+template <typename, typename ...> struct B { };
+template <typename> class A;
+
+template <typename R, typename ... S>
+struct A <R (S ...)> : public B <R, S ...>
+{
+ struct C {};
+ template <typename D> A (D, C = C ()) { }
+ R operator () (...);
+};
+
+template <typename R, typename ... S, typename T>
+auto operator >> (A <R (S ...)>, T)->A <R (S ...)>
+{
+ []() {};
+}
+
+int
+main ()
+{
+ A <int (int, int)> a = [](int, int) {};
+ auto b = []{};
+ (a >> b) (3, 5);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic115.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic115.C
new file mode 100644
index 0000000..bb78185
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic115.C
@@ -0,0 +1,19 @@
+// PR c++/49593
+// { dg-do compile { target c++11 } }
+
+template<typename... T> void f(T...) { }
+
+template<typename... Args>
+static void
+g(Args&&... args)
+{
+ f( static_cast<Args>(args)... );
+ f( (Args)args... );
+ f( Args(args)... );
+ f( Args{args}... );
+}
+
+int main()
+{
+ g(1, '2', 3.0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic116.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic116.C
new file mode 100644
index 0000000..05a9a79
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic116.C
@@ -0,0 +1,32 @@
+// Origin: PR c++/48320
+// { dg-do compile { target c++11 } }
+
+template<class... T>
+struct tuple
+{
+ typedef int type;
+};
+
+template<int... Indices>
+struct indices
+{
+};
+
+template<unsigned i, class Tuple>
+struct tuple_element
+{
+ typedef Tuple type;
+};
+
+template<class Tuple,
+ int... Indices,
+ class Result = tuple<typename tuple_element<Indices, Tuple>::type...> >
+Result
+f(Tuple&&, indices<Indices...>);
+
+
+void
+foo()
+{
+ f(tuple<int, char, unsigned> (), indices<2, 1, 0> ());
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic117.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic117.C
new file mode 100644
index 0000000..04663d2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic117.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+
+template <class T> struct A { typedef T type; };
+
+template <template <class...> class T, class... U>
+void f(typename T<U...>::type);
+
+int main()
+{
+ f<A,int>(42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic118.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic118.C
new file mode 100644
index 0000000..ee742eb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic118.C
@@ -0,0 +1,11 @@
+// This should fail deduction, before it produces a candidate.
+// { dg-do compile { target c++11 } }
+
+template <class... T>
+void f(T... ts); // { dg-message "deduction" }
+
+struct B { };
+int main()
+{
+ f<int>(B(), 1); // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic119.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic119.C
new file mode 100644
index 0000000..78cd23e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic119.C
@@ -0,0 +1,13 @@
+// PR c++/51046
+// { dg-do compile { target c++11 } }
+
+template<int... IS>
+void f()
+{
+ for (int i : IS); // { dg-error "not expanded" }
+}
+
+int main()
+{
+ f<0, 1, 2>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic12.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic12.C
new file mode 100644
index 0000000..661ed3d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic12.C
@@ -0,0 +1,42 @@
+// { dg-do compile { target c++11 } }
+// A tuple type
+template<typename... Args> struct tuple { };
+
+// Determine if two types are the same
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+// Append 'T' to the end of Tuple
+template<typename T, typename Tuple>
+struct append_to_tuple;
+
+template<typename T, typename... Args>
+struct append_to_tuple<T, tuple<Args...> > {
+ typedef tuple<Args..., T> type;
+};
+
+// Reverse a sequence of arguments (and return the result as a tuple)
+template<typename... Args> struct reverse;
+
+template<typename T, typename... Args>
+struct reverse<T, Args...> {
+ typedef typename append_to_tuple<T, typename reverse<Args...>::type>::type
+ type;
+};
+
+template<>
+struct reverse<> {
+ typedef tuple<> type;
+};
+
+int a0[is_same<reverse<>::type, tuple<> >::value? 1 : -1];
+int a1[is_same<reverse<int>::type, tuple<int> >::value? 1 : -1];
+int a2[is_same<reverse<char, int>::type, tuple<int, char> >::value? 1 : -1];
+int a3[is_same<reverse<char, int, long>::type, tuple<long, int, char> >::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic120.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic120.C
new file mode 100644
index 0000000..e26ee4e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic120.C
@@ -0,0 +1,24 @@
+// PR c++/48322
+// { dg-do compile { target c++11 } }
+
+template <class... T> struct tuple;
+template <class T> struct tuple<T> { T t; };
+
+template <class T, class U> struct pair;
+template<> struct pair<int,double> { };
+
+template <class... Ts>
+struct A
+{
+ template <class... Us,
+ class V = tuple<pair<Ts,Us>...> >
+ static void f()
+ {
+ V v;
+ }
+};
+
+int main()
+{
+ A<int>::f<double>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic121.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic121.C
new file mode 100644
index 0000000..2112196
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic121.C
@@ -0,0 +1,12 @@
+// PR c++/51507
+// { dg-do compile { target c++11 } }
+
+template<typename ...>
+struct foo { typedef void type; };
+template<typename ...Ts>
+auto g(Ts ...ts)->
+ typename foo<decltype(ts)...>::type
+{}
+int main() {
+ g(42);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic122.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic122.C
new file mode 100644
index 0000000..aa21ddd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic122.C
@@ -0,0 +1,23 @@
+// PR c++/52043
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wreturn-type" }
+
+template < class T > struct Container
+{
+ T f ();
+};
+
+template < class T >
+T deref (T)
+{} // { dg-warning "no return" }
+
+template < class T, class ... Args >
+auto deref (T u, int, Args ... args)->decltype (deref (u.f (), args ...))
+{} // { dg-warning "no return" }
+
+void
+foo ()
+{
+ Container < Container < int > > v;
+ deref (v, 2);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic123.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic123.C
new file mode 100644
index 0000000..f0ab9fc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic123.C
@@ -0,0 +1,14 @@
+// PR c++/52824
+// { dg-do compile { target c++11 } }
+
+template<typename G, typename H>
+struct foo
+{};
+
+template<typename... G>
+struct bar : foo<G...>
+{};
+
+int main() {
+ bar<int, float> f;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic124.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic124.C
new file mode 100644
index 0000000..d69c6f9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic124.C
@@ -0,0 +1,29 @@
+// PR c++/52292
+// { dg-do compile { target c++11 } }
+
+template <template <typename...> class T>
+struct foo {
+ template <typename... U>
+ foo(T<U...> x) { }
+};
+
+template <typename T>
+struct bar {
+ bar(T x) : value(x) { }
+
+ T value;
+};
+
+struct generic : private foo<bar> {
+ template <typename T>
+ generic(bar<T> x) : foo(x)
+ {
+ }
+
+};
+
+int main()
+{
+ bar<int> x(32);
+ generic y(x); // FAILS
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic125.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic125.C
new file mode 100644
index 0000000..89fd6b0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic125.C
@@ -0,0 +1,25 @@
+// PR c++/52380
+// { dg-do compile { target c++11 } }
+
+template<typename T>
+struct S
+{
+ template<typename U>
+ struct Unary // Line 5
+ {};
+
+ template<unsigned, typename... Args>
+ struct Dispatch // Line 9
+ : public Unary<Args...>
+ {};
+
+ template<typename... Args>
+ struct Variadic
+ : public Dispatch<sizeof...(Args), Args...>
+ {};
+};
+
+int main()
+{
+ S<void>::Variadic<void> z;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic126.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic126.C
new file mode 100644
index 0000000..513c7e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic126.C
@@ -0,0 +1,8 @@
+// PR c++/47220
+// { dg-do compile { target c++11 } }
+
+template < typename ... > struct A;
+
+struct B : A < // { dg-error "invalid" }
+{
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic127.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic127.C
new file mode 100644
index 0000000..2e0d593
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic127.C
@@ -0,0 +1,15 @@
+// PR c++/51148
+// { dg-do compile { target c++11 } }
+
+template<typename... Types>
+struct S
+{};
+
+template<typename... Types>
+struct T
+{
+ friend class S<Types>; // { dg-error "parameter packs not expanded" }
+};
+
+int main()
+{}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic128.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic128.C
new file mode 100644
index 0000000..8c2d3b2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic128.C
@@ -0,0 +1,16 @@
+// PR c++/50303
+// { dg-do compile { target c++11 } }
+
+template<typename Interface>
+struct A1 {
+};
+
+template<template<class I> class... Actions>
+void g2() {
+ g2<Actions...>();
+}
+
+int main()
+{
+ g2<A1>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic129.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic129.C
new file mode 100644
index 0000000..7118301
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic129.C
@@ -0,0 +1,19 @@
+// PR c++/50830
+// { dg-do compile { target c++11 } }
+
+template<template<class> class...>
+struct list_templates {};
+
+template<class>
+struct aa {};
+
+template<class... T>
+struct test {};
+
+template<template<class> class... F, class T>
+struct test<list_templates<F...>, T>
+{
+ struct inner {};
+};
+
+test<list_templates<aa>, int> a4; // error
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic13.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic13.C
new file mode 100644
index 0000000..8a59c98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic13.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args> struct tuple1 { };
+template<typename... Args> struct tuple2 { };
+
+template<typename T, typename U>
+struct same_tuple_args {
+ static const bool value = false;
+};
+
+template<typename... Args>
+struct same_tuple_args<tuple1<Args...>, tuple2<Args...> > {
+ static const bool value = true;
+};
+
+int same0[same_tuple_args<tuple1<>, tuple2<> >::value? 1 : -1];
+int same1[same_tuple_args<tuple1<int>, tuple2<int> >::value? 1 : -1];
+int same2[same_tuple_args<tuple1<float, int>, tuple2<float, int> >::value? 1 : -1];
+int diff0[!same_tuple_args<tuple1<>, tuple2<int> >::value? 1 : -1];
+int diff1[!same_tuple_args<tuple1<int, float>, tuple2<float, int> >::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic130.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic130.C
new file mode 100644
index 0000000..f73c8b5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic130.C
@@ -0,0 +1,8 @@
+// PR c++/52008
+// { dg-do compile { target c++11 } }
+
+template <int I, typename T, typename... Ts>
+struct A;
+
+template<typename... Ts>
+struct A<0, Ts...>; // { dg-error "not more specialized" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic131.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic131.C
new file mode 100644
index 0000000..3006f87
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic131.C
@@ -0,0 +1,11 @@
+// PR c++/38543
+// { dg-do compile { target c++11 } }
+
+template< typename ... T > void foo( T ... args );
+template<> void foo( ){}
+template<> void foo(int,double){}
+int main()
+{
+ foo( 0, 0.0 );
+ return 55;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic132.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic132.C
new file mode 100644
index 0000000..1b9c286
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic132.C
@@ -0,0 +1,27 @@
+// PR c++/53305
+// { dg-do compile { target c++11 } }
+
+template<class... Ts> struct tuple { };
+
+struct funct
+{
+ template<class... argTs>
+ int operator()(argTs...);
+};
+
+template<class...> struct test;
+
+template<template <class...> class tp,
+ class... arg1Ts, class... arg2Ts>
+struct test<tp<arg1Ts...>, tp<arg2Ts...>>
+{
+ template<class func, class...arg3Ts>
+ auto test2(func fun, arg1Ts... arg1s, arg3Ts... arg3s)
+ -> decltype(fun(arg1s..., arg3s...));
+};
+
+int main()
+{
+ test<tuple<>, tuple<char,int>> t2;
+ t2.test2(funct(), 'a', 2);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic133.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic133.C
new file mode 100644
index 0000000..0265f09
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic133.C
@@ -0,0 +1,46 @@
+// PR c++/53039
+// { dg-do compile { target c++11 } }
+
+template <class, class>
+struct is_convertible
+{
+ static const bool value = true;
+};
+
+template<bool, class T>
+struct enable_if
+{
+ typedef T type;
+};
+
+template <bool...>
+struct Xs
+{
+ static const bool value = true;
+};
+
+template<typename... BTs>
+ class BType
+ {
+ template <typename... BUs,
+ typename enable_if<
+ Xs<is_convertible<BUs, BTs>::value...>::value,
+ bool>::type = false>
+ void fooX(BUs&&...);
+ };
+
+template <typename... ATs>
+ struct AType
+ {
+ template <typename... AUs,
+ typename enable_if<
+ Xs<is_convertible<AUs, ATs>::value...>::value,
+ bool>::type = false>
+ void foo(AUs&&...);
+ };
+
+int main()
+{
+ AType<int, int> t;
+ t.foo(1, 1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic134.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic134.C
new file mode 100644
index 0000000..d4181b0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic134.C
@@ -0,0 +1,17 @@
+// PR c++/53862
+// { dg-do compile { target c++11 } }
+
+typedef unsigned long size_t;
+
+template<typename> struct is_scalar { static const bool value = true; };
+template<bool, typename T> struct enable_if { typedef T type; };
+
+template <size_t N, typename... Args>
+void f(Args...) {}
+
+template <size_t N, typename T, typename... Args>
+typename enable_if<is_scalar<T>::value, void>::type f(T, Args...) {}
+
+int main() {
+ f<1>(1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic135.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic135.C
new file mode 100644
index 0000000..fcdd2a7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic135.C
@@ -0,0 +1,5 @@
+// { dg-do compile { target c++11 } }
+
+template <typename ...> struct S;
+
+int i = S<int,>::undefined; // { dg-error "template argument 2 is invalid" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic139.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic139.C
new file mode 100644
index 0000000..a1c64f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic139.C
@@ -0,0 +1,14 @@
+// Origin: PR c++/53609
+// { dg-do compile { target c++11 } }
+
+template<class...I> struct List {};
+template<int T> struct Z {static const int value = T;};
+template<int...T> using LZ = List<Z<T>...>;
+
+template<class...U>
+struct F
+{
+ using N = LZ<U::value...>;
+};
+
+F<Z<1>, Z<2> >::N A;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic14.C
new file mode 100644
index 0000000..addbd74
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic14.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(ArgTypes...);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(float, double)>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic140.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic140.C
new file mode 100644
index 0000000..17ca9e5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic140.C
@@ -0,0 +1,22 @@
+// Origin: PR c++/53609
+// { dg-do compile { target c++11 } }
+
+template<class...I> struct List{ static const bool is_ok = false;};
+template<int T> struct Z
+{
+ static const int value = T;
+ static const int value_square = T * T;
+};
+
+template<template<int> class U>
+struct List<U<2>, U<3>, U<4>, U<9>> { static const bool is_ok = true;};
+
+template<int...T> using LZ = List<Z<T>...>;
+
+template<class...T>
+struct F
+{
+ using N = LZ<T::value..., T::value_square...>;
+};
+
+static_assert (F<Z<2>, Z<3>>::N::is_ok, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic141.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic141.C
new file mode 100644
index 0000000..6b893a7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic141.C
@@ -0,0 +1,22 @@
+// Origin: PR c++/53609
+// { dg-do compile { target c++11 } }
+
+template<class...I> struct List{ static const bool is_ok = false;};
+template<int T> struct Z
+{
+ static const int value = T;
+ static const int value_square = T * T;
+};
+
+template<template<int> class U>
+struct List<U<2>, U<3>, U<4>, U<9>> { static const bool is_ok = true;};
+
+template<int...T> using LZ = List<Z<T>...>;
+
+template<class...T>
+struct F
+{
+ using N = LZ<T::value..., Z<4>::value, Z<9>::value>;
+};
+
+static_assert (F<Z<2>, Z<3>>::N::is_ok, "");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic142.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic142.C
new file mode 100644
index 0000000..83b2429
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic142.C
@@ -0,0 +1,9 @@
+// Core 1609
+// { dg-require-effective-target c++11 }
+
+template<typename... T>
+void f2(int a = 0, T... b, int c = 1);
+
+int main(){
+ f2<>(); // parameter a has the value 0 and parameter c has the value 1
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic143.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic143.C
new file mode 100644
index 0000000..db0b268
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic143.C
@@ -0,0 +1,63 @@
+// PR c++/56782
+// { dg-do compile { target c++11 } }
+
+template<class T>
+T&& declval();
+
+struct is_convertible_impl {
+ template<class T>
+ static void sink(T);
+
+ template<class T, class U, class = decltype(sink<U>(declval<T>()))>
+ static auto test(int) -> char;
+
+ template<class, class>
+ static auto test(...) -> char(&)[2];
+};
+
+template<class T, class U>
+struct is_convertible : is_convertible_impl
+{
+ static const bool value = sizeof(test<T, U>(0)) == 1;
+};
+
+template<bool, class>
+struct enable_if {};
+
+template<class T>
+struct enable_if<true, T> { typedef T type; };
+
+template<bool, class If, class Else>
+struct conditional { typedef If type; };
+
+template<class If, class Else>
+struct conditional<false, If, Else> { typedef Else type; };
+
+template<class...>
+struct and_;
+
+template<>
+struct and_<>
+{
+ static const bool value = true;
+};
+
+template<class P>
+struct and_<P> : P
+{
+};
+
+template<class P1, class P2>
+struct and_<P1, P2> : conditional<P1::value, P2, P1>::type
+{
+};
+
+template<class... T>
+struct Tuple {
+ template<class... U,
+ class = typename enable_if<and_<is_convertible<U, T>... >::value, int>::type
+ >
+ Tuple(U&&...){}
+};
+
+static_assert(is_convertible<Tuple<>, Tuple<>>::value, "Ouch"); //#1
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic144.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic144.C
new file mode 100644
index 0000000..5d05d3d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic144.C
@@ -0,0 +1,15 @@
+// PR c++/56060
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct baz { };
+template<typename T> T bar();
+
+template<typename T, typename ... U>
+baz<decltype(bar<T>()(bar<U> ...))> // { dg-error "cannot be used" }
+foo();
+
+int main()
+{
+ foo<int>(); // { dg-error "no matching" }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic145.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic145.C
new file mode 100644
index 0000000..65edda5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic145.C
@@ -0,0 +1,13 @@
+// PR c++/59730
+// { dg-do compile { target c++11 } }
+
+template <typename> void declval();
+template <typename> void forward();
+template <typename> class D;
+template <typename _Functor, typename... _Bound_args>
+class D <_Functor(_Bound_args...)> {
+ template <typename... _Args, decltype(declval<_Functor>)>
+ void operator()(...) {
+ 0(forward<_Args>...);
+ }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic146.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic146.C
new file mode 100644
index 0000000..0c91db5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic146.C
@@ -0,0 +1,9 @@
+// PR c++/58606
+// { dg-require-effective-target c++11 }
+
+template<int&...I> struct A
+{
+ template<typename> struct B;
+
+ template<typename T> struct B<T*> {};
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic147.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic147.C
new file mode 100644
index 0000000..7f606d8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic147.C
@@ -0,0 +1,10 @@
+// PR c++/58466
+// { dg-require-effective-target c++11 }
+
+template<char, char...> struct A;
+
+template<typename> struct B;
+
+template<char... C> struct B<A<C...>> {};
+
+B<A<'X'>> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic148.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic148.C
new file mode 100644
index 0000000..a4ee635
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic148.C
@@ -0,0 +1,6 @@
+// PR c++/59989
+// { dg-require-effective-target c++11 }
+
+template<typename T> struct X {};
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
+int n = test<X, int>(0); // { dg-error "no match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic149.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic149.C
new file mode 100644
index 0000000..8207d98
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic149.C
@@ -0,0 +1,12 @@
+// PR c++/60248
+// { dg-do compile { target c++11 } }
+// { dg-options "-g -fabi-version=2" }
+
+template<int...> struct A {};
+
+template<> struct A<0>
+{
+ typedef enum { e } B;
+};
+
+A<0> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic15.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic15.C
new file mode 100644
index 0000000..895a548
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic15.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(const ArgTypes&...);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(const float&, double const&)>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic150.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic150.C
new file mode 100644
index 0000000..6a30efe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic150.C
@@ -0,0 +1,9 @@
+// PR c++/60219
+// { dg-require-effective-target c++11 }
+
+template<typename..., int> void foo();
+
+void bar()
+{
+ foo<0>; // { dg-error "" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic151.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic151.C
new file mode 100644
index 0000000..a65351d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic151.C
@@ -0,0 +1,9 @@
+// PR c++/54440
+// { dg-do compile { target c++11 } }
+
+template <class...T> struct A
+{
+ template <T... t, class U> struct B { };
+};
+
+A<int,char>::B<42,'a',float> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic152.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic152.C
new file mode 100644
index 0000000..d7dccc5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic152.C
@@ -0,0 +1,12 @@
+// PR c++/54440
+// { dg-do compile { target c++11 } }
+
+template <class...T> struct A
+{
+ template <template <T> class... TP, class U> struct B { };
+};
+
+template <int I> struct C { };
+template <char C> struct D { };
+
+A<int,char>::B<C,D,float> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic153.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic153.C
new file mode 100644
index 0000000..42a92f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic153.C
@@ -0,0 +1,6 @@
+// PR c++/58648
+// { dg-require-effective-target c++11 }
+
+template<int, typename...T, T...> int foo();
+
+int i = foo<0>();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic16.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic16.C
new file mode 100644
index 0000000..d377d36
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic16.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(const ArgTypes&... args);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(const float&)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(const float&, double const&)>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic17.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic17.C
new file mode 100644
index 0000000..d54022a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic17.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(const ArgTypes&......);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int(...)>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(const float&...)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(const float&,...)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(const float&, double const&...)>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic18.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic18.C
new file mode 100644
index 0000000..fc0e2dd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic18.C
@@ -0,0 +1,47 @@
+// { dg-do compile { target c++11 } }
+template<typename...> class tuple { };
+
+template<typename T, template<typename T> class... Metafunctions>
+struct apply_all
+{
+ typedef tuple<typename Metafunctions<T>::type...> type;
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename T>
+struct add_pointer {
+ typedef T* type;
+};
+
+template<typename T>
+struct add_pointer<T&>
+{
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference {
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&>
+{
+ typedef T& type;
+};
+
+int a0[is_same<apply_all<int>::type,tuple<> >::value? 1 : -1];
+int a1[is_same<apply_all<int, add_pointer>::type,tuple<int*> >::value? 1 : -1];
+int a2[is_same<apply_all<int, add_pointer, add_reference>::type,tuple<int*, int&> >::value? 1 : -1];
+int a3[is_same<apply_all<int&, add_pointer, add_reference>::type,tuple<int&, int&> >::value? 1 : -1];
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic19.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic19.C
new file mode 100644
index 0000000..0ae2672
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic19.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<typename T, template<class T> class... Metafunctions>
+struct tuple<Metafunctions<T>...> {
+ static const int value = 1;
+};
+
+template<typename T> struct add_pointer;
+template<typename T> struct add_reference;
+
+int a0[tuple<int, float>::value == 0? 1 : -1];
+int a1[tuple<add_pointer<int>, add_pointer<float> >::value == 0? 1 : -1];
+int a2[tuple<>::value == 0? 1 : -1];
+int a3[tuple<add_pointer<int> >::value == 1? 1 : -1];
+int a4[tuple<add_pointer<int>, add_reference<int> >::value == 1? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic2.C
new file mode 100644
index 0000000..3d127ea
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic2.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args = int> // { dg-error "default argument" }
+class tuple2;
+
+template<typename... = int> // { dg-error "default argument" }
+class tuple3;
+
+template<typename T1, typename T2, typename... Rest>
+struct two_or_more {}; // { dg-error "provided for" }
+
+typedef two_or_more<int> bad; // { dg-error "2 or more" "2 or more" }
+// { dg-error "invalid type" "invalid type" { target *-*-* } 11 }
+
+void f()
+{
+ two_or_more<int, float> z = 5; // { dg-error "two_or_more<int, float>" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic20.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic20.C
new file mode 100644
index 0000000..5b5a234
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic20.C
@@ -0,0 +1,47 @@
+// { dg-do compile { target c++11 } }
+template<typename T> struct add_pointer;
+template<typename T> struct add_reference;
+
+template<template<class T> class... Metafunctions>
+struct metatuple {
+ static const int value = 0;
+};
+
+template<>
+struct metatuple<add_pointer> {
+ static const int value = 1;
+};
+
+template<template<class T> class Meta>
+struct metatuple<Meta, Meta> { // { dg-error "candidates" }
+ static const int value = 2;
+};
+
+template<template<class T> class... Metafunctions>
+struct metatuple<add_pointer, Metafunctions...> { // { dg-error "" }
+ static const int value = 3;
+};
+
+template<template<class T> class First,
+ template<class T> class... Metafunctions>
+struct metatuple<First, Metafunctions...> { // { dg-error "struct" }
+ static const int value = 4;
+};
+
+template<template<class T> class First,
+ template<class T> class Second,
+ template<class T> class... Metafunctions>
+struct metatuple<First, Second, Metafunctions...> { // { dg-error "struct" }
+ static const int value = 5;
+};
+
+int a0[metatuple<>::value == 0? 1 : -1];
+int a1[metatuple<add_pointer>::value == 1? 1 : -1];
+int a2a[metatuple<add_pointer, add_pointer>::value == 2? 1 : -1]; // { dg-error "ambiguous|array bound" "bound" }
+int a2b[metatuple<add_reference, add_reference>::value == 2? 1 : -1];
+int a3[metatuple<add_pointer, add_reference>::value == 3? 1 : -1]; // { dg-error "ambiguous|array bound" "bound" }
+int a4[metatuple<add_reference>::value == 4? 1 : -1];
+int a5[metatuple<add_reference, add_pointer>::value == 5? 1 : -1];
+
+// { dg-error "incomplete" "incomplete" { target *-*-* } 40 }
+// { dg-error "incomplete" "incomplete" { target *-*-* } 42 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic21.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic21.C
new file mode 100644
index 0000000..a379bd1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic21.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename T, int... Dims>
+struct array { };
+
+array<int> a0;
+array<int, 1> a1;
+array<int, 1, 2, 3, 4> a1234;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic22.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic22.C
new file mode 100644
index 0000000..932d25b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic22.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+template<typename R, typename... ArgTypes>
+struct make_function_type
+{
+ typedef R type(ArgTypes... args);
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+int a0[is_same<make_function_type<int>::type, int()>::value? 1 : -1];
+int a1[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a2[is_same<make_function_type<int, float>::type, int(float)>::value? 1 : -1];
+int a3[is_same<make_function_type<int, float, double>::type, int(float, double const)>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic23.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic23.C
new file mode 100644
index 0000000..15825f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic23.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+template<typename T, int... Dims>
+struct array {
+ static const int value = 0;
+};
+
+template<>
+struct array<int, 17> {
+ static const int value = 1;
+};
+
+template<int... Dims>
+struct array<float, 1, Dims...> {
+ static const int value = 2;
+};
+
+template<typename T, int... Dims>
+struct array<T, 1, Dims...> {
+ static const int value = 3;
+};
+
+int a0[array<int>::value == 0? 1 : -1];
+int a1[array<int, 17>::value == 1? 1 : -1];
+int a2[array<float, 1, 2, 3>::value == 2? 1 : -1];
+int a3[array<double, 1, 2, 3>::value == 3? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic24.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic24.C
new file mode 100644
index 0000000..4f172cd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic24.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+template<typename T, T... Values>
+struct vector_c { };
+
+vector_c<int, 17, 42> intvec;
+vector_c<char, 'a', 'b', 'c'> charvec;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic25.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic25.C
new file mode 100644
index 0000000..5963760
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic25.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+template<int... Values>
+struct sum;
+
+template<>
+struct sum<> {
+ static const int value = 0;
+};
+
+template<int Value, int... Values>
+struct sum<Value, Values...> {
+ static const int value = Value + sum<Values...>::value;
+};
+
+int a0[sum<>::value == 0? 1 : -1];
+int a1[sum<1, 2, 3, 4, 5>::value == 15? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic26.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic26.C
new file mode 100644
index 0000000..2dbf092
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic26.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+template<template<int, int> class Meta, int Initial, int... Values>
+struct accumulate {
+ static const int value = Initial;
+};
+
+template<template<int, int> class Meta, int Initial, int Value, int... Rest>
+struct accumulate<Meta, Initial, Value, Rest...> {
+ static const int value =
+ Meta<Value, accumulate<Meta, Initial, Rest...>::value>::value;
+};
+
+template<int X, int Y>
+struct sum {
+ static const int value = X + Y;
+};
+
+template<int X, int Y>
+struct prod {
+ static const int value = X * Y;
+};
+
+int a0[accumulate<sum,0,1,2,3,4,5>::value == 15? 1 : -1];
+int a1[accumulate<prod,1,1,2,3,4,5>::value == 120? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic27.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic27.C
new file mode 100644
index 0000000..d690bb9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic27.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+template<typename Signature>
+struct function_traits;
+
+template<typename R, typename... ArgTypes>
+struct function_traits<R(ArgTypes...)> {
+ typedef R result_type;
+};
+
+template<typename T, typename U>
+struct same_type {
+ static const bool value = false;
+};
+
+template<typename T>
+struct same_type<T, T> {
+ static const bool value = true;
+};
+
+int a0[same_type<function_traits<int()>::result_type, int>::value? 1 : -1];
+int a1[same_type<function_traits<int(float)>::result_type, int>::value? 1 : -1];
+int a2[same_type<function_traits<int(double, char)>::result_type, int>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic28.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic28.C
new file mode 100644
index 0000000..b027861
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic28.C
@@ -0,0 +1,25 @@
+// { dg-do compile { target c++11 } }
+template<typename Signature>
+struct function_traits;
+
+template<typename R, typename... ArgTypes>
+struct function_traits<R(ArgTypes......)> {
+ typedef R result_type;
+};
+
+template<typename T, typename U>
+struct same_type {
+ static const bool value = false;
+};
+
+template<typename T>
+struct same_type<T, T> {
+ static const bool value = true;
+};
+
+int a0[same_type<function_traits<int(double, char...)>::result_type, int>::value? 1 : -1];
+int a1[same_type<function_traits<int(double, char,...)>::result_type, int>::value? 1 : -1];
+int a2[same_type<function_traits<int(char,...)>::result_type, int>::value? 1 : -1];
+int a3[same_type<function_traits<int(...)>::result_type, int>::value? 1 : -1];
+int a4[same_type<function_traits<int(double x, char...)>::result_type, int>::value? 1 : -1];
+int a5[same_type<function_traits<int(double, char y...)>::result_type, int>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic29.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic29.C
new file mode 100644
index 0000000..8931e0f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic29.C
@@ -0,0 +1,35 @@
+// { dg-do compile { target c++11 } }
+template<typename Signature>
+struct function_traits;
+
+template<typename R, typename... ArgTypes>
+struct function_traits<R(ArgTypes...)> {
+ typedef R result_type;
+};
+
+template<typename R, typename Class, typename... ArgTypes>
+struct function_traits<R (Class::*)(ArgTypes...)> {
+ typedef R result_type;
+};
+
+template<typename R, typename Class, typename... ArgTypes>
+struct function_traits<R (Class::*)(ArgTypes...) const> {
+ typedef R result_type;
+};
+
+template<typename T, typename U>
+struct same_type {
+ static const bool value = false;
+};
+
+template<typename T>
+struct same_type<T, T> {
+ static const bool value = true;
+};
+
+struct X {};
+
+int a0[same_type<function_traits<int (X::*)()>::result_type, int>::value? 1 : -1];
+int a1[same_type<function_traits<int (X::*)(float)>::result_type, int>::value? 1 : -1];
+int a2[same_type<function_traits<int (X::*)(double, char)>::result_type, int>::value? 1 : -1];
+int a3[same_type<function_traits<int (X::*)(double, char) const>::result_type, int>::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic3.C
new file mode 100644
index 0000000..c4a5b55
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic3.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+class tuple {};
+
+void f()
+{
+ tuple<> x;
+ tuple<int> y;
+ tuple<int, float> z;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic30.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic30.C
new file mode 100644
index 0000000..0d8c0c9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic30.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<typename... T>
+void eat(T...);
+
+void f()
+{
+ eat();
+ eat(1);
+ eat(1, 2);
+ eat(17, 3.14159, "Hello, World!");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic31.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic31.C
new file mode 100644
index 0000000..cffd703
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic31.C
@@ -0,0 +1,12 @@
+// { dg-options "-g" }
+// { dg-do compile { target c++11 } }
+template<typename... T>
+void eat(T...) { }
+
+void f()
+{
+ eat();
+ eat(1);
+ eat(1, 2);
+ eat(17, 3.14159, "Hello, World!");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic32.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic32.C
new file mode 100644
index 0000000..0c5f6ee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic32.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<typename... T>
+void eat(const T&...) { }
+
+void f()
+{
+ eat();
+ eat(1);
+ eat(1, 2);
+ eat(17, 3.14159, "Hello, World!");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic33.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic33.C
new file mode 100644
index 0000000..bd25b84
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic33.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+void print_all() {}
+
+template<typename T, typename... Rest>
+void print_all(const T& t, const Rest&... rest)
+{
+ print_all(rest...);
+}
+
+void f()
+{
+ print_all();
+ print_all(1);
+ print_all(1, 3.14159);
+ print_all("Hello, World!", 17, 3.14159);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic34.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic34.C
new file mode 100644
index 0000000..ae92bac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic34.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<int I, typename... Args>
+void get_ith(const Args&... args);
+
+void f()
+{
+ get_ith<1>(1, 2, 3);
+ get_ith<1, int>(1, 2.0, 'x');
+ get_ith<1, int, double>(1, 2.0, 'x');
+ get_ith<1, int, double, char>(1, 2.0, 'x');
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic35.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic35.C
new file mode 100644
index 0000000..8365c9b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic35.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<int I, typename... Args>
+void get_ith(const Args&... args); // { dg-message "note" }
+
+void f()
+{
+ get_ith<1, float>(1, 2.0, 'x');
+ get_ith<1, int, double, char, int>(1, 2.0, 'x'); // { dg-error "too few arguments" }
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic36.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic36.C
new file mode 100644
index 0000000..c60e6d0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic36.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+template<typename T, typename... Args>
+void f(const T&, const Args&... args)
+{
+ f(args); // { dg-error "packs not expanded" }
+}
+
+template<typename... Values>
+struct tuple_base { };
+
+template<typename... Values>
+struct tuple : tuple_base<Values> { }; // { dg-error "packs not expanded" }
+
+// { dg-message "args" "note" { target *-*-* } 5 }
+// { dg-message "Values" "note" { target *-*-* } 12 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic37.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic37.C
new file mode 100644
index 0000000..db488ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic37.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename... Values>
+struct tuple
+{
+ static const __SIZE_TYPE__ length = sizeof...(Values);
+};
+
+int a0[tuple<>::length == 0? 1 : -1];
+int a1[tuple<int>::length == 1? 1 : -1];
+int a2[tuple<int, float>::length == 2? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic38.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic38.C
new file mode 100644
index 0000000..62031a3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic38.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+template<int... Values>
+struct int_vec {};
+
+template<int... Values>
+struct int_vec<0, (Values+1)...> {}; // { dg-error "involves template parameter" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic39.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic39.C
new file mode 100644
index 0000000..b603478
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic39.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+struct tuple {};
+
+template<typename T, typename... Args>
+struct tuple<Args..., T> { }; // { dg-error "end" }
+
+
+template<int... Values>
+struct int_vec { };
+
+template<int I, int... Values>
+struct int_vec<Values..., I> { }; // { dg-error "end" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic4.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic4.C
new file mode 100644
index 0000000..8e8f814
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic4.C
@@ -0,0 +1,15 @@
+// { dg-options "-fabi-version=0" }
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+class tuple {};
+
+void f_none(tuple<>) {}
+void f_one(tuple<int>) {}
+void f_two(tuple<int, float>) {}
+void f_nested(tuple<int, tuple<double, char>, float>) { }
+
+
+// { dg-final { scan-assembler "_Z6f_none5tupleIJEE" } }
+// { dg-final { scan-assembler "_Z5f_one5tupleIJiEE" } }
+// { dg-final { scan-assembler "_Z5f_two5tupleIJifEE" } }
+// { dg-final { scan-assembler "_Z8f_nested5tupleIJiS_IJdcEEfEE" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic40.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic40.C
new file mode 100644
index 0000000..e4df9b8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic40.C
@@ -0,0 +1,3 @@
+// { dg-do compile { target c++11 } }
+template<typename... Values, typename T>
+struct backward_tuple {}; // { dg-error "end" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic41.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic41.C
new file mode 100644
index 0000000..df11367
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic41.C
@@ -0,0 +1,14 @@
+// A function parameter pack is only deduced if it's at the end
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+void f(const Args&... args, int oops);
+
+int main()
+{
+ f<>(1);
+ f(1);
+ f<int>(1,2);
+ f(1,2); // { dg-error "no match" }
+}
+
+// { dg-prune-output "note" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic42.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic42.C
new file mode 100644
index 0000000..b1aa141
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic42.C
@@ -0,0 +1,12 @@
+// { dg-options "-fabi-version=5" }
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+void f(Args...) { }
+
+void g()
+{
+ f<int*, float*, double*>(0, 0, 0);
+ f<int*>(0,0,0);
+}
+// { dg-final { scan-assembler "_Z1fIIPiPfPdEEvDpT_" } }
+// { dg-final { scan-assembler "_Z1fIIPiiiEEvDpT_" } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic43.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic43.C
new file mode 100644
index 0000000..b2f1f8d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic43.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+int f(const Args&...);
+
+void g()
+{
+ int (*fp)(const int&, const float&) = &f;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic44.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic44.C
new file mode 100644
index 0000000..01df2e0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic44.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+int f(const Args&...);
+
+template<typename T> void g(T) { }
+
+void h()
+{
+ g(&f<int, float>);
+}
+
+// { dg-final { scan-assembler "_Z1gIPFiRKiRKfEEvT_"} }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic45.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic45.C
new file mode 100644
index 0000000..2a79bc8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic45.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+int& f(Args...);
+
+template<typename T1, typename T2>
+float& f(T1, T2);
+
+float& g() {
+ return f(17, 3.14159);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic46.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic46.C
new file mode 100644
index 0000000..0ea4ba6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic46.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+int& f(Args&...);
+
+template<typename... Args>
+float& f(const Args&...);
+
+int& g(int x, float y)
+{
+ return f(x, y);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic47.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic47.C
new file mode 100644
index 0000000..53916a9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic47.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+template<typename T> struct wrap { };
+
+template<typename... Args>
+int& f(const Args&...);
+
+template<typename... Args>
+float& f(const wrap<Args>&...);
+
+int& g(int x, float y, double z)
+{
+ return f(x, y, z);
+}
+
+float& h(wrap<int> x, wrap<float> y, wrap<double> z)
+{
+ return f(x, y, z);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic48.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic48.C
new file mode 100644
index 0000000..e672e76
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic48.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename T, typename... Args>
+int& f(const T&, Args...);
+
+template<typename T>
+float& f(const T&);
+
+float& g() {
+ return f(17);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic49.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic49.C
new file mode 100644
index 0000000..49c2675
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic49.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+int& f(...);
+
+template<typename... Args>
+float& f(Args...);
+
+float& g() {
+ return f(17, 3.14159);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic5.C
new file mode 100644
index 0000000..6595b7f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic5.C
@@ -0,0 +1,38 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<>
+struct tuple<> {
+ static const int value = 1;
+};
+
+template<>
+struct tuple<int> {
+ static const int value = 2;
+};
+
+
+template<>
+struct tuple<int, float> {
+ static const int value = 3;
+};
+
+template<typename T>
+struct tuple<T, T> {
+ static const int value = 4;
+};
+
+template<>
+struct tuple<float, float> {
+ static const int value = 5;
+};
+
+int a0[tuple<float>::value == 0? 1 : -1];
+int a1[tuple<>::value == 1? 1 : -1];
+int a2[tuple<int>::value == 2? 1 : -1];
+int a3[tuple<int, float>::value == 3? 1 : -1];
+int a4[tuple<int, int>::value == 4? 1 : -1];
+int a5[tuple<float, float>::value == 5? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic50.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic50.C
new file mode 100644
index 0000000..99e1699
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic50.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+int& f(int, double, ...);
+
+template<typename... Args>
+float& f(Args...);
+
+float& g() {
+ return f(17, 3.14159, 3);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic51.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic51.C
new file mode 100644
index 0000000..e072caa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic51.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<typename T1, typename T2>
+float& f(T1, T2);
+
+template<typename... Args>
+int& f(Args...);
+
+float& g() {
+ return f(17, 3.14159);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic52.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic52.C
new file mode 100644
index 0000000..28ef857
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic52.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename T, T... Values>
+struct vector_c { };
+
+vector_c<int, 1, 2, 3> v1;
+vector_c<char, 'a', 'b', 'c'> v2;
+vector_c<long, 1u, 2, 3l> v3;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic53.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic53.C
new file mode 100644
index 0000000..ef3d150
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic53.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ public:
+ typedef typename F::result_type result_type;
+
+ template<typename... Args>
+ typename F::result_type operator()(Args&... args);
+};
+
+template<typename F, typename... BoundArgs>
+template<typename... Args>
+typename F::result_type
+bound_functor<F, BoundArgs...>::operator()(Args&... args)
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic54.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic54.C
new file mode 100644
index 0000000..3fbeefd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic54.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ public:
+ bound_functor();
+};
+
+template<typename F, typename... BoundArgs>
+bound_functor<F, BoundArgs...>::bound_functor()
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic55.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic55.C
new file mode 100644
index 0000000..bdf25cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic55.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+template<typename F, typename... BoundArgs>
+class bound_functor
+{
+ public:
+ bound_functor(const BoundArgs&... bound_args);
+};
+
+template<typename F, typename... BoundArgs>
+bound_functor<F, BoundArgs...>::bound_functor(const BoundArgs&...)
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic56.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic56.C
new file mode 100644
index 0000000..50b2445
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic56.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+template<typename... Elements>
+struct tuple { };
+
+template<typename T, typename... Elements>
+struct tuple<T, Elements...> {
+ int foo();
+};
+
+template<typename T, typename... Elements>
+struct tuple<T*, Elements...> {
+ int bar();
+};
+
+template<typename T, typename... Elements>
+int tuple<T, Elements...>::foo() { return 0; }
+
+template<typename T, typename... Elements>
+int tuple<T*, Elements...>::bar() { return 0; }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic57.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic57.C
new file mode 100644
index 0000000..a3d2bf1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic57.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+template<typename T, int... Dims>
+struct array {
+ int foo();
+};
+
+template<typename T>
+struct array<T, 0> {
+ int bar();
+};
+
+template<typename T, int... Dims>
+int array<T, Dims...>::foo() { }
+
+template<typename T>
+int array<T, 0>::bar() { }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic58.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic58.C
new file mode 100644
index 0000000..1423322
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic58.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+#include <typeinfo>
+
+template<typename... Args>
+void foo(Args...) { }
+
+template<typename... Args>
+void bar(Args... args) {
+ foo(Args()...);
+ foo(args = args...);
+ foo(reinterpret_cast<void*>(&args)...);
+ foo(const_cast<const Args>(args)...);
+ foo(static_cast<void*>(&args)...);
+ foo(dynamic_cast<void*>(&args)...);
+ foo(typeid(Args)...);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic59.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic59.C
new file mode 100644
index 0000000..817883c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic59.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++11 } }
+template<class T, typename... VarArgs>
+void print(T t, VarArgs args); // { dg-error "packs not expanded" }
+// { dg-message "VarArgs" "note" { target *-*-* } 3 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic6.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic6.C
new file mode 100644
index 0000000..3dc74cc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic6.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+template<typename ... Args>
+struct tuple_base {};
+
+template<typename ... Args>
+struct tuple : public tuple_base<Args...>
+{
+};
+
+tuple<> zero;
+tuple<int> one;
+tuple<float, int> two;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic60.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic60.C
new file mode 100644
index 0000000..57bbcfe
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic60.C
@@ -0,0 +1 @@
+template<typename... Args> class tuple; // { dg-error "variadic templates" "" { target { ! c++11 } } }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic61.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic61.C
new file mode 100644
index 0000000..d06c5f6
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic61.C
@@ -0,0 +1,2 @@
+// { dg-options "-std=gnu++98 -pedantic" }
+template<typename... Args> class tuple; // { dg-warning "variadic templates" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic62.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic62.C
new file mode 100644
index 0000000..010b3a5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic62.C
@@ -0,0 +1,2 @@
+// { dg-options "-std=gnu++98 -pedantic-errors" }
+template<typename... Args> class tuple; // { dg-error "variadic templates" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic63.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic63.C
new file mode 100644
index 0000000..945b95c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic63.C
@@ -0,0 +1,3 @@
+// { dg-options "-pedantic" }
+// { dg-do compile { target c++11 } }
+template<typename... Args> class tuple;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic64.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic64.C
new file mode 100644
index 0000000..d7c313d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic64.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+template<int... Indexes>
+ struct _Index_tuple { };
+
+template<int _Num, typename _Tuple = _Index_tuple<> >
+struct _Build_index_tuple;
+
+template<int _Num, int... _Indexes>
+struct _Build_index_tuple<_Num, _Index_tuple<_Indexes...> >
+ : _Build_index_tuple<_Num - 1,
+ _Index_tuple<_Indexes..., sizeof...(_Indexes)> >
+{
+};
+
+template<int... _Indexes>
+struct _Build_index_tuple<0, _Index_tuple<_Indexes...> >
+{
+ typedef _Index_tuple<_Indexes...> __type;
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic65.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic65.C
new file mode 100644
index 0000000..e2ef931
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic65.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+struct unused;
+template<typename T1 = unused, typename T2 = unused, typename T3 = unused,
+ typename T4 = unused, typename T5 = unused, typename T6 = unused>
+struct tuple {};
+
+template<typename... Args>
+tuple<Args...> foo() { } // { dg-bogus "cannot expand" "" }
+
+int main()
+{
+ foo<int,int,int,int,int,int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic66.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic66.C
new file mode 100644
index 0000000..ac92221
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic66.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+
+template<typename Result, typename Functor, typename... ArgTypes>
+Result bind(Functor, ArgTypes...) { }
+
+void f()
+{
+ bind<int>(17, 20, 22);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic67.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic67.C
new file mode 100644
index 0000000..6e328cf
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic67.C
@@ -0,0 +1,24 @@
+// { dg-do compile { target c++11 } }
+template<typename... Elements> struct tuple {};
+
+template<typename... Args>
+struct nested
+{
+ typedef tuple<tuple<Args, Args...>...> type;
+};
+
+template<typename T, typename U>
+struct is_same
+{
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T>
+{
+ static const bool value = true;
+};
+
+int a0[is_same<nested<int, float>::type,
+ tuple<tuple<int, int, float>,
+ tuple<float, int, float> > >::value? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic68.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic68.C
new file mode 100644
index 0000000..edcdfa8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic68.C
@@ -0,0 +1,22 @@
+// { dg-do run { target c++11 } }
+extern "C" void abort();
+
+template<typename T, T... Values>
+void f(T* expected_values, int n)
+{
+ if (sizeof...(Values) != n)
+ abort ();
+
+ T values[] = { Values... };
+ for (int i = 0; i < n; ++i)
+ if (values[i] != expected_values[i])
+ abort();
+}
+
+int main()
+{
+ int test_arr1[3] = { 1, 2, 3 };
+ f<int, 1, 2, 3>(test_arr1, 3);
+
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic69.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic69.C
new file mode 100644
index 0000000..660e09a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic69.C
@@ -0,0 +1,34 @@
+// { dg-do compile { target c++11 } }
+template<typename T>
+struct stored_value
+{
+ explicit stored_value() : value() { }
+
+ explicit stored_value(const T& value) : value(value) { }
+
+ stored_value(int, const T& value) : value(value) { }
+
+ T value;
+};
+
+template<typename... Values>
+struct myclass : public stored_value<Values>...
+{
+ myclass() { }
+
+ explicit myclass(const Values&... values)
+ : stored_value<Values>(values)... { }
+
+ explicit myclass(int x, const Values&... values)
+ : stored_value<Values>(x, values)... { }
+
+};
+
+void f()
+{
+ int i;
+ float f;
+ myclass<int*, float*> ifp1;
+ myclass<int*, float*> ifp2(&i, &f);
+ myclass<int*, float*> ifp3(1, &i, &f);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic7.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic7.C
new file mode 100644
index 0000000..8b04996
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic7.C
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+struct tuple_base {
+ static const int value = 0;
+};
+
+template<>
+struct tuple_base<int> {
+ static const int value = 1;
+};
+
+template<>
+struct tuple_base<int, float> {
+ static const int value = 2;
+};
+
+template<>
+struct tuple_base<float, int> {
+ static const int value = 3;
+};
+
+template<typename... Args>
+struct int_tuple : tuple_base<int, Args...> { };
+
+template<typename... Args>
+struct tuple_int : tuple_base<Args..., int> { };
+
+int a0a[int_tuple<int>::value == 0? 1 : -1];
+int a0b[int_tuple<int>::value == 0? 1 : -1];
+int a1a[int_tuple<>::value == 1? 1 : -1];
+int a1b[tuple_int<>::value == 1? 1 : -1];
+int a2[int_tuple<float>::value == 2? 1 : -1];
+int a3[tuple_int<float>::value == 3? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic70.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic70.C
new file mode 100644
index 0000000..df26c6a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic70.C
@@ -0,0 +1,21 @@
+// { dg-do run { target c++11 } }
+template <typename T, T... Args> struct bomb;
+
+template <typename T>
+struct bomb<T> {
+ static const T value = 0;
+};
+
+template <typename T, T v, T... Args>
+struct bomb<T, v, Args...> {
+ static const T value = v + bomb<T, Args...>::value;
+};
+
+extern "C" void abort();
+
+int main() {
+ bomb<int, 1, 2, 3, 4> b;
+ if (b.value != 10)
+ abort();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic71.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic71.C
new file mode 100644
index 0000000..101d220
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic71.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct list {};
+
+template<typename Sequence, typename Head>
+struct push_front;
+
+template<typename... Elements, typename Head>
+struct push_front<list<Elements...>, Head> {
+ typedef list<Head, Elements> type; // { dg-error "parameter packs not expanded" }
+};
+
+// { dg-message "Elements" "note" { target *-*-* } 9 }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic72.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic72.C
new file mode 100644
index 0000000..41f83c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic72.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+struct A {};
+struct B {};
+struct C {};
+
+template<typename... Mixins>
+struct mixed_up : public Mixins...
+{
+};
+
+void fA(A);
+void fB(B);
+void fC(C);
+
+void g()
+{
+ mixed_up<A, B, C> m;
+ fA(m);
+ fB(m);
+ fC(m);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic73.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic73.C
new file mode 100644
index 0000000..533ed46
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic73.C
@@ -0,0 +1,32 @@
+// { dg-do run { target c++11 } }
+struct A {};
+struct B {};
+struct C {};
+
+template<typename... Exceptions> void f(int idx) throw(Exceptions...) {
+ if (idx == 0) throw A();
+ else if (idx == 1) throw B();
+ else if (idx == 2) throw C();
+}
+
+extern "C" void abort();
+
+int main()
+{
+ try {
+ f<A, B, C>(0);
+ abort();
+ } catch (A) {
+ }
+ try {
+ f<A, B, C>(1);
+ abort();
+ } catch (B) {
+ }
+ try {
+ f<A, B, C>(2);
+ abort();
+ } catch (C) {
+ }
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic74.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic74.C
new file mode 100644
index 0000000..1af6531
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic74.C
@@ -0,0 +1,28 @@
+// { dg-do compile { target c++11 } }
+template <class... Types> class A
+{
+public:
+ template <Types... Values> class X { /* ... */ }; // { dg-error "not a valid type for a template non-type parameter" }
+};
+
+template<class... Types> class B
+{
+public:
+ template <Types*... Values> class X {
+ typename A<Types*...>::template X<Values...> foo;
+ };
+};
+
+int i;
+float f;
+
+A<int*, float*>::X<&i, &f> apple1;
+B<int, float>::X<&i, &f> banana1;
+
+A<int*, float*>::X<&i> apple2; // { dg-error "wrong number of template arguments" "wrong number" }
+// { dg-error "invalid type" "invalid" { target *-*-* } 22 }
+A<int*, float*>::X<&i, &f, &f> apple3; // { dg-error "wrong number of template arguments" "wrong number" }
+// { dg-error "invalid type" "invalid" { target *-*-* } 24 }
+A<int, float> apple4;
+
+// { dg-prune-output "provided for" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic75.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic75.C
new file mode 100644
index 0000000..a3aa070
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic75.C
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++11 } }
+
+template<typename...> struct tuple { };
+
+template<template<typename T> class Meta, typename... Values>
+struct apply_all
+{
+ typedef tuple<typename Meta<Values>::type...> type;
+};
+
+template<typename T, typename U>
+struct is_same {
+ static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T, T> {
+ static const bool value = true;
+};
+
+template<typename T>
+struct add_reference {
+ typedef T& type;
+};
+
+template<typename T>
+struct add_reference<T&> {
+ typedef T& type;
+};
+
+static_assert(is_same<apply_all<add_reference, int, int&, float>::type,
+ tuple<int&, int&, float&> >::value,
+ "check apply");
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic76.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic76.C
new file mode 100644
index 0000000..d8d1ef9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic76.C
@@ -0,0 +1,13 @@
+// PR c++/33496
+// { dg-do compile { target c++11 } }
+
+template<int... N> int foo ()
+{
+ return sizeof... (N ()); // { dg-error "" }
+ return sizeof... (N) (); // { dg-error "" }
+}
+
+int bar ()
+{
+ return foo<0> ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic77.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic77.C
new file mode 100644
index 0000000..79badaa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic77.C
@@ -0,0 +1,21 @@
+// PR c++/33496
+// { dg-do compile { target c++11 } }
+
+template<int M, int N> struct pair
+{
+ int i, j;
+ pair () : i (M), j (N) {}
+};
+
+template<int... M> struct S
+{
+ template<int... N> static int foo ()
+ {
+ return sizeof... (pair<M, N>); // { dg-error "" }
+ }
+};
+
+int bar ()
+{
+ return S<0, 1, 2>::foo<0, 1> ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic78.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic78.C
new file mode 100644
index 0000000..0a42435
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic78.C
@@ -0,0 +1,22 @@
+// PR c++/33496
+// { dg-do compile { target c++11 } }
+
+template<int M, int N> struct pair
+{
+ int i, j;
+ pair () : i (M), j (N) {}
+};
+
+template<int... M> struct S
+{
+ template<int... N> static int *foo ()
+ {
+ static int x[] = { (M + N)... }; // { dg-error "mismatched argument pack lengths" }
+ return x;
+ }
+};
+
+int *bar ()
+{
+ return S<0, 1, 2>::foo<0, 1> ();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic79.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic79.C
new file mode 100644
index 0000000..389199c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic79.C
@@ -0,0 +1,6 @@
+// PR c++/33213
+// { dg-do compile { target c++11 } }
+
+template<template<typename> class...> struct A;
+
+template<template<typename...> class... B> struct A<B...> {}; // { dg-error "mismatch|'template<class ...> class ... B ...'" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic8.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic8.C
new file mode 100644
index 0000000..e2d7fa7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic8.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+template<typename... Args>
+struct tuple_base {
+ static const int value = 0;
+};
+
+template<>
+struct tuple_base<int*>
+{
+ static const int value = 1;
+};
+
+template<typename T>
+struct tuple_base<T*>
+{
+ static const int value = 2;
+};
+
+template<typename... Args>
+struct tuple_of_pointers : tuple_base<Args*...> { };
+
+int a1[tuple_of_pointers<int>::value == 1? 1 : -1];
+int a2[tuple_of_pointers<float>::value == 2? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic80.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic80.C
new file mode 100644
index 0000000..0612e73
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic80.C
@@ -0,0 +1,27 @@
+// PR c++/31434
+// { dg-do run { target c++11 } }
+
+extern "C" void abort ();
+
+template<typename... T> inline int foo (const T...) { return 1; }
+template<typename... T> inline int foo (const T *...) { return 2; }
+
+void
+bar (int *a)
+{
+ a[0] = foo (0);
+ a[1] = foo (*a);
+ a[2] = foo<int> (a);
+ a[3] = foo<int> (2, 3, 4, 5);
+ a[4] = foo<int> (a, a + 1, a + 2);
+}
+
+int
+main ()
+{
+ int a[5];
+ bar (a);
+ if (a[0] != 1 || a[1] != 1 || a[2] != 2 || a[3] != 1 || a[4] != 2)
+ abort ();
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic81.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic81.C
new file mode 100644
index 0000000..0877255
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic81.C
@@ -0,0 +1,11 @@
+// PR c++/33461
+// { dg-do compile { target c++11 } }
+
+template<typename> struct A;
+
+template<typename... T> struct A<T*> // { dg-error "not expanded|T|not used|T" }
+{
+ struct B;
+};
+
+A<void*> a; // { dg-error "incomplete" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic82.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic82.C
new file mode 100644
index 0000000..f9bbc35
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic82.C
@@ -0,0 +1,11 @@
+// PR c++/33461
+// { dg-do compile { target c++11 } }
+
+template<typename> struct A;
+
+template<typename... T> struct A<T*...> // { dg-bogus "cannot expand" "" }
+{
+ struct B;
+};
+
+A<void*> a; // { dg-bogus "incomplete type" "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic83.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic83.C
new file mode 100644
index 0000000..507fc7e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic83.C
@@ -0,0 +1,8 @@
+// PR c++/31441
+// { dg-do compile { target c++11 } }
+
+template<typename> struct A;
+
+template<typename... T> struct A<T...> { }; // { dg-bogus "cannot expand" "" }
+
+A<int> a; // { dg-bogus "incomplete type" "" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic84.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic84.C
new file mode 100644
index 0000000..debe75c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic84.C
@@ -0,0 +1,25 @@
+// PR c++/32565
+// { dg-do compile { target c++11 } }
+
+template<typename...> struct A1;
+template<template<int...> class T> struct A1<T<0> > {};
+template<typename...> struct A2;
+template<template<int...> class T> struct A2<T<0, 1> > {};
+template<typename...> struct A3;
+template<template<int, int...> class T> struct A3<T<0, 1> > {};
+template<typename...> struct A4;
+template<template<typename...> class T> struct A4<T<int> > {};
+template<typename...> struct A5;
+template<template<typename...> class T> struct A5<T<int, long> > {};
+template<typename...> struct A6;
+template<template<typename, typename...> class T> struct A6<T<int, long> > {};
+template<int> struct B1 {};
+template<int, int> struct B2 {};
+template<typename> struct B3 {};
+template<typename, typename> struct B4 {};
+A1<B1<0> > a1;
+A2<B2<0, 1> > a2;
+A3<B2<0, 1> > a3;
+A4<B3<int> > a4;
+A5<B4<int, long> > a5;
+A6<B4<int, long> > a6;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic85.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic85.C
new file mode 100644
index 0000000..708104a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic85.C
@@ -0,0 +1,9 @@
+// PR c++/32565
+// { dg-do compile { target c++11 } }
+
+template<typename...> struct A1;
+template<template<int, int...> class T> struct A1<T<0, 1> > {};
+template<int, int, int...> struct B1 {};
+A1<B1<0, 1> > a1;
+template<int...> struct B2 {};
+A1<B2<0, 1> > a2; // { dg-error "incomplete type" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic86.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic86.C
new file mode 100644
index 0000000..2213ef7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic86.C
@@ -0,0 +1,18 @@
+// PR c++/33943
+// { dg-do compile { target c++11 } }
+
+template<typename... A> struct foo {};
+
+template<typename A0, typename... A1> struct bar {};
+
+template<typename U> struct baz;
+
+template<template<typename...> class T, typename... U> struct baz< T<U...> >
+{};
+
+template<template<typename, typename...> class T, typename U, typename... V>
+struct baz< T<U, V...> >
+{};
+
+baz< foo<int, short> > b1;
+baz< bar<int, short> > b2;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic87.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic87.C
new file mode 100644
index 0000000..f3c0092
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic87.C
@@ -0,0 +1,23 @@
+// PR c++/33965
+// { dg-do compile { target c++11 } }
+template<typename T>
+struct foo
+{
+ static bool const value = false;
+};
+
+template<template<typename...> class T, typename... Args>
+struct foo<T<Args...> >
+{
+ static bool const value = true;
+};
+
+template<int I>
+struct int_
+{};
+
+int main()
+{
+ static_assert(foo<int_<0> >::value == false,
+ "picked up partial specialization, but should not have");
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic88.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic88.C
new file mode 100644
index 0000000..b96c719
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic88.C
@@ -0,0 +1,23 @@
+// { dg-do compile { target c++11 } }
+
+template<template<typename...> class TT>
+TT<int, float, double> foo(TT<int, float>)
+{
+ return TT<int, float, double>();
+}
+
+template<typename T>
+int& foo(T)
+{
+ static int i = 0; return i;
+}
+
+template<typename T, typename U>
+struct pair {};
+
+void bar()
+{
+ pair<int, float> p;
+ int& i = foo(p);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic89.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic89.C
new file mode 100644
index 0000000..1e59c1a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic89.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+// Contributed by Eric Niebler
+template<typename T, typename U>
+struct pair
+{};
+
+template<typename T>
+struct test;
+
+template<template<typename...> class T, typename... Args>
+struct test<T<Args...> >
+{};
+
+test<pair<int, double> > t;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic9.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic9.C
new file mode 100644
index 0000000..795da57
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic9.C
@@ -0,0 +1,38 @@
+// { dg-do compile { target c++11 } }
+template<typename T1, typename T2>
+struct pair {};
+
+template<typename... Args>
+struct tuple {
+ static const int value = 0;
+};
+
+template<>
+struct tuple<pair<int, float> > {
+ static const int value = 1;
+};
+
+template<typename U>
+struct tuple<pair<int, U> > {
+ static const int value = 2;
+};
+
+template<typename T, typename U>
+struct tuple<pair<T, U>, pair<T, U> > {
+ static const int value = 3;
+};
+
+
+template<typename... Outer>
+struct X {
+ template<typename... Inner>
+ struct Y
+ {
+ typedef tuple<pair<Outer, Inner>...> type;
+ };
+};
+
+int a0[X<int, double>::Y<short, char>::type::value == 0? 1 : -1];
+int a1[X<int>::Y<float>::type::value == 1? 1 : -1];
+int a2[X<int>::Y<double>::type::value == 2? 1 : -1];
+int a3[X<int, int>::Y<double, double>::type::value == 3? 1 : -1];
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic90.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic90.C
new file mode 100644
index 0000000..587a0e8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic90.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+
+template<template<typename...> class TT>
+struct X { };
+
+template<typename T, typename U> struct pair { };
+
+X<pair> x;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic91.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic91.C
new file mode 100644
index 0000000..71f341c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic91.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target c++11 } }
+template<int N> struct Int2Type { };
+
+template<typename... T>
+struct Outer {
+ template<typename... U>
+ void foo(Int2Type<sizeof...(T)>, Int2Type<sizeof...(U)>);
+};
+
+
+Outer<short, int, long> outer;
+
+void g4() {
+ outer.foo<float, double>(Int2Type<3>(), Int2Type<2>());
+}
+
+template<typename... T, template<T...> class X> void f1();
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic92.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic92.C
new file mode 100644
index 0000000..99159a2
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic92.C
@@ -0,0 +1,70 @@
+// Various tests for variadic templates and partial specialization.
+// { dg-do compile { target c++11 } }
+
+// PR c++/36846
+template<typename A, typename B>
+struct pair;
+
+template<typename... T>
+struct pairs;
+
+template<typename... AS, typename... BS>
+struct pairs<pair<AS, BS>...> {
+ struct mismatched_packs {};
+};
+
+template class pairs<
+ pair<int, int>,
+ pair<int, int>
+>;
+
+template<int A, int B>
+struct point;
+
+template<typename... T>
+struct points;
+
+template<int... AS, int... BS>
+struct points<point<AS, BS>...> {
+ struct mismatched_packs {};
+};
+
+template class points<
+ point<0, 1>,
+ point<0, 1>
+>;
+
+// PR c++/35477
+template <class...ARGS> struct tuple {};
+template <class A, class B> struct test {};
+template <class... ARGS, class B> struct test<B, tuple<ARGS...>>
+{
+ template <class T> struct inside {};
+};
+
+// PR c++/38276
+template<typename...> struct A;
+
+template<typename, typename> struct B;
+
+template<typename... T, typename... U> struct B<A<T...>, A<U...> >
+{
+ static int i;
+};
+
+B<A<>, A<int> > b1;
+
+B<A<int>, A<> > b2;
+
+// PR c++/35784
+template <typename...> struct p;
+
+template <typename, typename> struct d;
+
+template <typename... A, typename... B>
+struct d<p<A...>, p<B...> > { typedef int t; };
+
+typedef d<p<>, p<int, float> >::t q;
+typedef d<q, d<p<int>, p<float> >::t> r; // *
+
+typedef d<d<p<>, p<int, float> >::t, d<p<>, p<> >::t> s;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic93.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic93.C
new file mode 100644
index 0000000..63a1103
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic93.C
@@ -0,0 +1,11 @@
+// PR c++/35297
+// { dg-do compile { target c++11 } }
+
+template <class T=int, class... ARGS>
+struct test2 {};
+
+int main()
+{
+ test2<> a;
+ return 0;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic94.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic94.C
new file mode 100644
index 0000000..f5f3228
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic94.C
@@ -0,0 +1,33 @@
+// PR c++/40595
+// { dg-do compile { target c++11 } }
+
+template<int N>
+struct S
+{
+ typedef int type;
+};
+
+template<typename T>
+struct Get
+{
+ static T get();
+};
+
+template<typename F>
+struct B
+{
+ template<typename ... Args>
+ typename S<sizeof( Get<F>::get() (Get<Args>::get() ...) )>::type
+ f(Args&& ... a);
+};
+
+struct X
+{
+ bool operator()(int) const;
+};
+
+int main()
+{
+ B<X> b;
+ b.f(1);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic95.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic95.C
new file mode 100644
index 0000000..e383938
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic95.C
@@ -0,0 +1,17 @@
+// PR c++/39863
+// { dg-do compile { target c++11 } }
+
+template <typename... T>
+struct A {};
+
+template <typename T, typename U>
+struct S {};
+
+template <typename... T, typename... U>
+A< S<T, U>... > f(U... u)
+{ return A< S<T, U>... >(); }
+
+int main()
+{
+ f<int>(0.0);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic96.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic96.C
new file mode 100644
index 0000000..189c4eb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic96.C
@@ -0,0 +1,26 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++/41785
+// { dg-do compile { target c++11 } }
+
+struct a {};
+
+template < typename T, typename ENCLOSING >
+struct base;
+
+template < typename... T >
+struct derived
+ : public base< T, derived< T... > >...
+{};
+
+template < typename... T>
+struct base< a, derived< T... > >
+{
+ typedef derived< T... >
+ Derived;
+};
+
+int main()
+{
+ derived< a > instance;
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic97.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic97.C
new file mode 100644
index 0000000..b251cc3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic97.C
@@ -0,0 +1,35 @@
+// PR c++/42266
+// { dg-do compile { target c++11 } }
+
+template<typename... _Elements>
+ class tuple;
+
+template<typename _Arg>
+ class _Mu;
+
+template<typename _Signature>
+ struct _Bind;
+
+template<typename _Functor, typename... _Bound_args>
+ class _Bind<_Functor(_Bound_args...)>
+ {
+ template<typename... _Args, typename
+ = decltype(_Functor()(_Mu<_Bound_args>()(_Bound_args(),
+ tuple<_Args...>())...) )>
+ void __call() { }
+ };
+
+template<typename _Functor, typename _Arg>
+ _Bind<_Functor(_Arg)>
+ bind(_Functor, _Arg) { }
+
+struct State
+{
+ bool ready() { return true; }
+
+ void f()
+ {
+ bind(&State::ready, this);
+ }
+};
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic98.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic98.C
new file mode 100644
index 0000000..c463cac
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic98.C
@@ -0,0 +1,410 @@
+// PR c++/42358
+// { dg-do assemble { target c++11 } }
+
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+typedef __SIZE_TYPE__ size_t;
+namespace std __attribute__ ((__visibility__ ("default"))) {
+ using ::size_t;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+ struct __sfinae_types {
+ typedef char __one;
+ typedef struct {
+ } __two;
+ };
+ template<typename _Tp, _Tp __v> struct integral_constant {
+ static const _Tp value = __v;
+ typedef _Tp value_type;
+ typedef integral_constant<_Tp, __v> type;
+ };
+ typedef integral_constant<bool, false> false_type;
+ template<typename> struct remove_cv;
+ template<typename> struct __is_void_helper : public false_type {
+ };
+ template<typename _Tp> struct is_void : public integral_constant<bool, (__is_void_helper<typename remove_cv<_Tp>::type>::value)> {
+ };
+ template<typename> struct is_array : public false_type {
+ };
+ template<typename> struct is_function : public false_type {
+ };
+ template<typename, unsigned _Uint = 0> struct extent : public integral_constant<std::size_t, 0> {
+ };
+ template<typename _Tp> struct remove_const {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct remove_volatile {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct remove_cv {
+ typedef typename remove_const<typename remove_volatile<_Tp>::type>::type type;
+ };
+ template<typename> struct is_lvalue_reference : public false_type {
+ };
+ template<typename> struct is_rvalue_reference : public false_type {
+ };
+ template<typename _Tp> struct is_reference : public integral_constant<bool, (is_lvalue_reference<_Tp>::value || is_rvalue_reference<_Tp>::value)> {
+ };
+ template<typename _Tp> struct remove_reference {
+ typedef _Tp type;
+ };
+ template<typename _Tp, bool = !is_reference<_Tp>::value && !is_void<_Tp>::value> struct __add_rvalue_reference_helper {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct add_rvalue_reference : public __add_rvalue_reference_helper<_Tp> {
+ };
+ template<typename _Tp> typename add_rvalue_reference<_Tp>::type declval();
+ template<typename _From, typename _To, bool = (is_void<_From>::value || is_void<_To>::value || is_function<_To>::value || is_array<_To>::value)> struct __is_convertible_helper {
+ };
+ template<typename _From, typename _To> struct __is_convertible_helper<_From, _To, false> : public __sfinae_types {
+ static __one __test(_To);
+ static __two __test(...);
+ static const bool __value = sizeof(__test(declval<_From>())) == 1;
+ };
+ template<typename _From, typename _To> struct is_convertible : public integral_constant<bool, __is_convertible_helper<_From, _To>::__value> {
+ };
+ template<bool, typename _Tp = void> struct enable_if {
+ };
+ template<typename _Tp> struct enable_if<true, _Tp> {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct identity {
+ typedef _Tp type;
+ };
+ template<typename _Tp> inline typename enable_if<!is_lvalue_reference<_Tp>::value, _Tp&&>::type forward(typename std::identity<_Tp>::type& __t) {
+ }
+ template<typename _Tp> inline typename enable_if<is_lvalue_reference<_Tp>::value, _Tp>::type forward(typename std::identity<_Tp>::type __t) {
+ }
+ template<typename _Tp> inline typename std::remove_reference<_Tp>::type&& move(_Tp&& __t) {
+ }
+ template<class _T1, class _T2> struct pair {
+ typedef _T1 first_type;
+ typedef _T2 second_type;
+ _T1 first;
+ _T2 second;
+ template<class _U1, class = typename std::enable_if<std::is_convertible<_U1, _T1>::value>::type> pair(_U1&& __x, const _T2& __y) : first(std::forward<_U1>(__x)), second(__y) {
+ }
+ template<class _U2, class = typename std::enable_if<std::is_convertible<_U2, _T2>::value>::type> pair(const _T1& __x, _U2&& __y) : first(__x), second(std::forward<_U2>(__y)) {
+ }
+ template<class _U1, class _U2, class = typename std::enable_if<std::is_convertible<_U1, _T1>::value && std::is_convertible<_U2, _T2>::value>::type> pair(_U1&& __x, _U2&& __y) : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) {
+ }
+ template<class _U1, class _U2> pair(pair<_U1, _U2>&& __p) : first(std::move(__p.first)), second(std::move(__p.second)) {
+ }
+ template<class _U1, class _U2> pair& operator=(pair<_U1, _U2>&& __p) {
+ }
+ };
+ struct input_iterator_tag {
+ };
+ struct output_iterator_tag {
+ };
+ struct forward_iterator_tag : public input_iterator_tag {
+ };
+ struct bidirectional_iterator_tag : public forward_iterator_tag {
+ };
+ template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, typename _Pointer = _Tp*, typename _Reference = _Tp&> struct iterator {
+ typedef _Category iterator_category;
+ typedef _Tp value_type;
+ typedef _Distance difference_type;
+ typedef _Pointer pointer;
+ typedef _Reference reference;
+ };
+ template<typename _Iterator> struct iterator_traits {
+ typedef typename _Iterator::iterator_category iterator_category;
+ typedef typename _Iterator::value_type value_type;
+ typedef typename _Iterator::difference_type difference_type;
+ typedef typename _Iterator::pointer pointer;
+ typedef typename _Iterator::reference reference;
+ };
+ template<typename _Iter> inline typename iterator_traits<_Iter>::iterator_category __iterator_category(const _Iter&) {
+ }
+ template<typename _InputIterator> inline typename iterator_traits<_InputIterator>::difference_type __distance(_InputIterator __first, _InputIterator __last, input_iterator_tag) {
+ }
+ template<typename _InputIterator> inline typename iterator_traits<_InputIterator>::difference_type distance(_InputIterator __first, _InputIterator __last) {
+ return std::__distance(__first, __last, std::__iterator_category(__first));
+ }
+ template<typename _Iterator> class reverse_iterator : public iterator<typename iterator_traits<_Iterator>::iterator_category, typename iterator_traits<_Iterator>::value_type, typename iterator_traits<_Iterator>::difference_type, typename iterator_traits<_Iterator>::pointer, typename iterator_traits<_Iterator>::reference> {
+ };
+ template<typename _Container> class back_insert_iterator : public iterator<output_iterator_tag, void, void, void, void> {
+ };
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+ template<typename _Tp> class new_allocator {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+ new_allocator() throw() {
+ }
+ new_allocator(const new_allocator&) throw() {
+ }
+ template<typename _Tp1> new_allocator(const new_allocator<_Tp1>&) throw() {
+ }
+ template<typename... _Args> void construct(pointer __p, _Args&&... __args) {
+ }
+ };
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+ template<typename _Tp> class allocator: public __gnu_cxx::new_allocator<_Tp> {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+ template<typename _Tp1> struct rebind {
+ typedef allocator<_Tp1> other;
+ };
+ allocator() throw() {
+ }
+ template<typename _Tp1> allocator(const allocator<_Tp1>&) throw() {
+ }
+ };
+ extern template class allocator<char>;
+ extern template class allocator<wchar_t>;
+ template<typename _Arg, typename _Result> struct unary_function {
+ typedef _Arg argument_type;
+ typedef _Result result_type;
+ };
+ template<typename _Arg1, typename _Arg2, typename _Result> struct binary_function {
+ typedef _Arg1 first_argument_type;
+ typedef _Arg2 second_argument_type;
+ typedef _Result result_type;
+ };
+ template<typename _Tp> struct less : public binary_function<_Tp, _Tp, bool> {
+ bool operator()(const _Tp& __x, const _Tp& __y) const {
+ }
+ };
+ template<typename _Pair> struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> {
+ const typename _Pair::first_type& operator()(const _Pair& __x) const {
+ }
+ };
+ struct _Rb_tree_node_base {
+ typedef _Rb_tree_node_base* _Base_ptr;
+ typedef const _Rb_tree_node_base* _Const_Base_ptr;
+ };
+ template<typename _Val> struct _Rb_tree_node : public _Rb_tree_node_base {
+ typedef _Rb_tree_node<_Val>* _Link_type;
+ _Val _M_value_field;
+ template<typename... _Args> _Rb_tree_node(_Args&&... __args) : _Rb_tree_node_base(), _M_value_field(std::forward<_Args>(__args)...) {
+ }
+ };
+ template<typename _Tp> struct _Rb_tree_iterator {
+ typedef _Tp value_type;
+ typedef _Tp& reference;
+ typedef _Tp* pointer;
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef ptrdiff_t difference_type;
+ typedef _Rb_tree_iterator<_Tp> _Self;
+ typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
+ typedef _Rb_tree_node<_Tp>* _Link_type;
+ _Base_ptr _M_node;
+ };
+ template<typename _Tp> struct _Rb_tree_const_iterator {
+ typedef _Tp value_type;
+ typedef const _Tp& reference;
+ typedef const _Tp* pointer;
+ typedef _Rb_tree_iterator<_Tp> iterator;
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef ptrdiff_t difference_type;
+ typedef _Rb_tree_const_iterator<_Tp> _Self;
+ typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;
+ typedef const _Rb_tree_node<_Tp>* _Link_type;
+ explicit _Rb_tree_const_iterator(_Link_type __x) : _M_node(__x) {
+ }
+ _Rb_tree_const_iterator(const iterator& __it) : _M_node(__it._M_node) {
+ }
+ _Base_ptr _M_node;
+ };
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc = allocator<_Val> > class _Rb_tree {
+ typedef typename _Alloc::template rebind<_Rb_tree_node<_Val> >::other _Node_allocator;
+ typedef _Rb_tree_node_base* _Base_ptr;
+ typedef const _Rb_tree_node_base* _Const_Base_ptr;
+ public:
+ typedef _Key key_type;
+ typedef _Val value_type;
+ typedef value_type* pointer;
+ typedef const value_type* const_pointer;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef _Rb_tree_node<_Val>* _Link_type;
+ typedef const _Rb_tree_node<_Val>* _Const_Link_type;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Alloc allocator_type;
+ _Node_allocator& _M_get_Node_allocator() {
+ }
+ _Link_type _M_get_node() {
+ }
+ template<typename... _Args> _Link_type _M_create_node(_Args&&... __args) {
+ _Link_type __tmp = _M_get_node();
+ try {
+ _M_get_Node_allocator().construct(__tmp, std::forward<_Args>(__args)...);
+ }
+ catch(...) {
+ }
+ }
+ template<typename _Key_compare, bool _Is_pod_comparator = __is_pod(_Key_compare)> struct _Rb_tree_impl : public _Node_allocator {
+ _Key_compare _M_key_compare;
+ _Rb_tree_node_base _M_header;
+ size_type _M_node_count;
+ _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a) : _Node_allocator(__a), _M_key_compare(__comp), _M_header(), _M_node_count(0) {
+ }
+ void _M_initialize() {
+ }
+ };
+ _Rb_tree_impl<_Compare> _M_impl;
+ _Base_ptr& _M_rightmost() {
+ }
+ _Link_type _M_begin() {
+ }
+ _Link_type _M_end() {
+ }
+ _Const_Link_type _M_end() const {
+ }
+ static _Link_type _S_right(_Base_ptr __x) {
+ }
+ static const_reference _S_value(_Const_Base_ptr __x) {
+ }
+ static const _Key& _S_key(_Const_Base_ptr __x) {
+ return _KeyOfValue()(_S_value(__x));
+ }
+ typedef _Rb_tree_iterator<value_type> iterator;
+ typedef _Rb_tree_const_iterator<value_type> const_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ iterator _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __y, const value_type& __v);
+ iterator _M_insert_lower(_Base_ptr __x, _Base_ptr __y, const value_type& __v);
+ iterator _M_insert_equal_lower(const value_type& __x);
+ iterator _M_lower_bound(_Link_type __x, _Link_type __y, const _Key& __k);
+ iterator _M_upper_bound(_Link_type __x, _Link_type __y, const _Key& __k);
+ _Rb_tree(const _Compare& __comp, const allocator_type& __a = allocator_type()) : _M_impl(__comp, __a) {
+ }
+ iterator end() {
+ }
+ iterator _M_insert_equal_(const_iterator __position, const value_type& __x);
+ template<typename _InputIterator> void _M_insert_unique(_InputIterator __first, _InputIterator __last);
+ template<typename _InputIterator> void _M_insert_equal(_InputIterator __first, _InputIterator __last);
+ size_type count(const key_type& __k) const;
+ pair<iterator, iterator> equal_range(const key_type& __k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& __k) const;
+ };
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __p, const _Val& __v) {
+ _Link_type __z = _M_create_node(__v);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_lower(_Base_ptr __x, _Base_ptr __p, const _Val& __v) {
+ _Link_type __z = _M_create_node(__v);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_equal_lower(const _Val& __v) {
+ _Link_type __x = _M_begin();
+ _Link_type __y = _M_end();
+ return _M_insert_lower(__x, __y, __v);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator, typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator> _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: equal_range(const _Key& __k) {
+ _Link_type __x = _M_begin();
+ _Link_type __y = _M_end();
+ while (__x != 0) {
+ if (_M_impl._M_key_compare(_S_key(__x), __k)) __x = _S_right(__x);
+ else {
+ _Link_type __xu(__x), __yu(__y);
+ return pair<iterator, iterator>(_M_lower_bound(__x, __y, __k), _M_upper_bound(__xu, __yu, __k));
+ }
+ }
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator> _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: equal_range(const _Key& __k) const {
+ _Const_Link_type __y = _M_end();
+ return pair<const_iterator, const_iterator>(const_iterator(__y), const_iterator(__y));
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_equal_(const_iterator __position, const _Val& __v) {
+ if (__position._M_node == _M_end()) {
+ if (__position._M_node == _M_rightmost()) return _M_insert_(0, _M_rightmost(), __v);
+ else return _M_insert_equal_lower(__v);
+ }
+ }
+ template<typename _Key, typename _Val, typename _KoV, typename _Cmp, typename _Alloc> template<class _II> void _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>:: _M_insert_equal(_II __first, _II __last) {
+ for (;
+ __first != __last;
+ ++__first) _M_insert_equal_(end(), *__first);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: count(const _Key& __k) const {
+ pair<const_iterator, const_iterator> __p = equal_range(__k);
+ const size_type __n = std::distance(__p.first, __p.second);
+ }
+ template<class _E> class initializer_list {
+ public:
+ typedef _E value_type;
+ typedef const _E& reference;
+ typedef const _E& const_reference;
+ typedef size_t size_type;
+ typedef const _E* iterator;
+ typedef const _E* const_iterator;
+ iterator _M_array;
+ size_type _M_len;
+ initializer_list(const_iterator __a, size_type __l) : _M_array(__a), _M_len(__l) {
+ }
+ const_iterator begin() const {
+ }
+ const_iterator end() const {
+ }
+ };
+ template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > class multimap {
+ typedef _Key key_type;
+ typedef _Tp mapped_type;
+ typedef std::pair<const _Key, _Tp> value_type;
+ typedef _Compare key_compare;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::value_type _Alloc_value_type;
+ typedef typename _Alloc::template rebind<value_type>::other _Pair_alloc_type;
+ typedef _Rb_tree<key_type, value_type, _Select1st<value_type>, key_compare, _Pair_alloc_type> _Rep_type;
+ _Rep_type _M_t;
+ public:
+ typedef typename _Pair_alloc_type::pointer pointer;
+ typedef typename _Pair_alloc_type::const_pointer const_pointer;
+ typedef typename _Pair_alloc_type::reference reference;
+ typedef typename _Pair_alloc_type::const_reference const_reference;
+ typedef typename _Rep_type::iterator iterator;
+ typedef typename _Rep_type::const_iterator const_iterator;
+ typedef typename _Rep_type::size_type size_type;
+ typedef typename _Rep_type::difference_type difference_type;
+ typedef typename _Rep_type::reverse_iterator reverse_iterator;
+ typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+ multimap(initializer_list<value_type> __l, const _Compare& __comp = _Compare(), const allocator_type& __a = allocator_type()) : _M_t(__comp, __a) {
+ _M_t._M_insert_equal(__l.begin(), __l.end());
+ }
+ template<typename _InputIterator> multimap(_InputIterator __first, _InputIterator __last) : _M_t() {
+ }
+ template<typename _InputIterator> multimap(_InputIterator __first, _InputIterator __last, const _Compare& __comp, const allocator_type& __a = allocator_type()) : _M_t(__comp, __a) {
+ }
+ template<typename _InputIterator> void insert(_InputIterator __first, _InputIterator __last) {
+ }
+ size_type count(const key_type& __x) const {
+ return _M_t.count(__x);
+ }
+ std::pair<iterator, iterator> equal_range(const key_type& __x) {
+ return _M_t.equal_range(__x);
+ }
+ template<typename _K1, typename _T1, typename _C1, typename _A1> friend bool operator==(const multimap<_K1, _T1, _C1, _A1>&, const multimap<_K1, _T1, _C1, _A1>&);
+ template<typename _K1, typename _T1, typename _C1, typename _A1> friend bool operator<(const multimap<_K1, _T1, _C1, _A1>&, const multimap<_K1, _T1, _C1, _A1>&);
+ };
+}
+extern "C" {
+ extern void __assert_fail (__const char *__assertion, __const char *__file, unsigned int __line, __const char *__function) throw () __attribute__ ((__noreturn__));
+}
+using namespace std;
+int test01() {
+ typedef multimap<int,double> Container;
+ typedef Container::iterator iterator;
+ typedef pair<iterator,iterator> itpair;
+ Container m({
+ {
+ 1, 1.0 }
+ }
+ );
+ itpair ip = m.equal_range(1);
+ ((distance(ip.first, ip.second) == 3) ? static_cast<void> (0) : __assert_fail ("distance(ip.first, ip.second) == 3", "/home/richard/src/trunk/libstdc++-v3/testsuite/23_containers/multimap/init-list.cc", 36, __PRETTY_FUNCTION__));
+ ((m.count(7) == 2) ? static_cast<void> (0) : __assert_fail ("m.count(7) == 2", "/home/richard/src/trunk/libstdc++-v3/testsuite/23_containers/multimap/init-list.cc", 54, __PRETTY_FUNCTION__));
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic99.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic99.C
new file mode 100644
index 0000000..8398b2a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/variadic99.C
@@ -0,0 +1,22 @@
+// PR c++/43054
+// { dg-do compile { target c++11 } }
+
+template<typename R> struct future { };
+
+template<typename Fn, typename... Args>
+ auto
+ async(Fn&& fn, Args&&... args)
+ -> future<decltype(fn(args...))>;
+
+template<typename Fn, typename... Args>
+ auto
+ async(Fn&& fn, Args&&... args)
+ -> future<decltype(fn(args...))>;
+
+int work2(int value);
+
+void work(int value)
+{
+ async(work2, value);
+}
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-33964.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-33964.C
new file mode 100644
index 0000000..9e40737
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-33964.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+template<typename ... Args>
+struct foo
+{
+ static bool const value = true;
+};
+
+template<typename ... Args>
+struct foo< typename Args::is_applied... > // { dg-error "not used|Args" }
+{
+ static bool const value = false;
+};
+
+struct not_applied { typedef void is_applied; };
+struct applied { typedef applied is_applied; };
+
+int main()
+{
+ foo<applied, applied> i;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34050.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34050.C
new file mode 100644
index 0000000..6dec6df
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34050.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+struct A {};
+
+template<typename... T> struct B : T...
+{
+ B() : T()... {}
+};
+
+B<A> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051-2.C
new file mode 100644
index 0000000..ace905a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051-2.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> struct A
+{
+ int i __attribute__((aligned(__alignof(T)))); // { dg-error "parameter packs|T" }
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051.C
new file mode 100644
index 0000000..d0a8b95
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34051.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+struct A
+{
+ operator int();
+};
+
+template <typename... T> struct B : A
+{
+ using A::operator T; // { dg-error "parameter packs|T" }
+};
+
+B<int> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34052.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34052.C
new file mode 100644
index 0000000..1036537
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34052.C
@@ -0,0 +1,8 @@
+// { dg-do compile { target c++11 } }
+template<typename... T, typename = T> struct A {}; // { dg-error "must be at the end" }
+
+
+template<template<typename... T, typename = T> class U> struct B // { dg-error "must be at the end" }
+{
+ template<int> U<int> foo(); // { dg-error "mismatch|constant|invalid|invalid" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34055.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34055.C
new file mode 100644
index 0000000..3ee7bad
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34055.C
@@ -0,0 +1,31 @@
+// { dg-do compile { target c++11 } }
+// PR c++/34055
+template<typename...> struct A;
+
+template<typename...T> struct A<T*> // { dg-error "parameter packs|T" }
+{
+ void foo();
+};
+
+template<typename...T> void A<T*>::foo() {} // { dg-error "invalid declarator" }
+
+
+
+template<typename...> struct B;
+
+template<typename...T> struct B<T&> // { dg-error "parameter packs|T" }
+{
+ void foo();
+};
+
+template<typename...T> void B<T&>::foo() {} // { dg-error "invalid declarator" }
+
+
+template<typename...> struct C;
+
+template<typename...T> struct C<T()> // { dg-error "parameter packs|T" }
+{
+ void foo();
+};
+
+template<typename...T> void C<T()>::foo() {} // { dg-error "invalid declarator" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34102.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34102.C
new file mode 100644
index 0000000..c2a6ae5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34102.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// PR c++/34102
+struct A {};
+
+template<typename> struct B : virtual A {};
+
+template<typename...T> struct C : B<T> {}; // { dg-error "parameter packs|T" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34103.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34103.C
new file mode 100644
index 0000000..bb2f829
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34103.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+// PR c++/34103
+template<typename> struct A {};
+
+template<typename...T> void foo(A<T>, A<T>); // { dg-error "parameter packs|T" }
+
+template<typename...T> void foo(A<T>, A<T>) {} // { dg-error "parameter packs|T" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C
new file mode 100644
index 0000000..5bb2a21
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+template<template<typename... T> class Comp, typename... T> void f( T... Value)
+{
+ static_assert( Comp<T>::value > 0, "" ); // { dg-error "parameter packs|T" }
+}
+
+template<template<typename... T> class Comp, typename... T> void g( T... Value)
+{
+ static_assert( Comp<T...>::value > 0, "" );
+}
+
+template <typename... T>
+struct Foo
+{
+ static const int value=1;
+};
+
+int main()
+{
+ f<Foo>( 2 );
+ g<Foo>( 2 );
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219.C
new file mode 100644
index 0000000..91ee609
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34219.C
@@ -0,0 +1,15 @@
+// { dg-do compile { target c++11 } }
+template<typename T, T a, T... Params>
+struct max
+{
+ static const T value = a > max<T, Params>::value ? a : max<T, Params>::value; // { dg-error "not expanded|Params" }
+};
+
+template<typename T, T a, T b>
+struct max<T, a, b>
+{
+ static const T value = a > b ? a : b;
+};
+
+static const int value1 = max< int, 1, 2>::value;
+static const int value2 = max< int, 1, 3, 5>::value;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34314.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34314.C
new file mode 100644
index 0000000..ee0ed01
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34314.C
@@ -0,0 +1,50 @@
+// { dg-do compile { target c++11 } }
+
+template<typename Fun, typename... Args> // { dg-error "template parameter" }
+struct call;
+
+template<typename Fun, typename Arg0>
+struct call // { dg-error "redeclared here" }
+{
+ template<typename Sig>
+ struct result;
+
+ template<typename X, typename Y>
+ struct result<X(Y)>
+ {
+ typedef X type;
+ };
+};
+
+
+template<typename Fun, int... N> // { dg-error "template parameter" }
+struct call2;
+
+template<typename Fun, int N>
+struct call2 // { dg-error "redeclared here" }
+{
+ template<typename Sig>
+ struct result;
+
+ template<typename X, typename Y>
+ struct result<X(Y)>
+ {
+ typedef X type;
+ };
+};
+
+template<typename Fun, template<typename> class... TT> // { dg-error "template parameter" }
+struct call3;
+
+template<typename Fun, template<typename> class TT>
+struct call3 // { dg-error "redeclared here" }
+{
+ template<typename Sig>
+ struct result;
+
+ template<typename X, typename Y>
+ struct result<X(Y)>
+ {
+ typedef X type;
+ };
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34399.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34399.C
new file mode 100644
index 0000000..74f35f7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34399.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+template<int...> struct A
+{
+ void foo();
+};
+
+struct B
+{
+ template<int N> friend void A<N>::A::foo(); // { dg-error "declared as friend" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34606.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34606.C
new file mode 100644
index 0000000..a032bfc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34606.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct A;
+
+template<typename T, typename... U> struct A<T, U> // { dg-error "parameter packs|U" }
+{
+ template<typename> struct B;
+
+ template<typename X> struct B<X*> {};
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34751.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34751.C
new file mode 100644
index 0000000..1b1e669
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34751.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++11 } }
+// PR c++/34751
+struct A {};
+
+template<typename... Args = int> // { dg-error "cannot have a default" }
+void f(Args... args = 0); // { dg-error "cannot have a default argument" }
+
+template<typename... Args>
+void g(Args... = 0); // { dg-error "cannot have a default argument" }
+
+
+template<int, typename T = A, int T::*...p = 0 > struct B {}; // { dg-error "cannot have a default argument|no default argument" }
+
+B<0> b;
+
+template<int, typename T = A, int T::*... = 0 > struct C {}; // { dg-error "cannot have a default argument|no default argument" }
+
+C<0> c;
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34753.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34753.C
new file mode 100644
index 0000000..496acae
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34753.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> struct A
+{
+ template<T> struct B {}; // { dg-error "not expanded|T" }
+};
+
+A<int>::B<0> b;
+
+template<typename... T> struct B
+{
+ template<T> B(); // { dg-error "not expanded|T" }
+};
+
+B<int> c;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34754.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34754.C
new file mode 100644
index 0000000..c42fe49
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34754.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+template<template<int> class... T> struct A
+{
+ void foo(T<0>); // { dg-error "not expanded|T" }
+ void bar(T<0>); // { dg-error "not expanded|T" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34755.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34755.C
new file mode 100644
index 0000000..3ef089d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34755.C
@@ -0,0 +1,6 @@
+// { dg-do compile { target c++11 } }
+template<typename> struct A {};
+
+template<template<typename> class... T> void foo(T<int>) {} // { dg-error "not expanded|T" }
+
+template void foo<A>(A<int>); // { dg-error "does not match" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34919.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34919.C
new file mode 100644
index 0000000..5b106e1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34919.C
@@ -0,0 +1,13 @@
+// { dg-do compile { target c++11 } }
+template<int... N> struct A
+{
+ static void foo()
+ {
+ int i = N; // { dg-error "not expanded|N" }
+ }
+};
+
+void bar()
+{
+ A<0>::foo();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34961.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34961.C
new file mode 100644
index 0000000..11315ca
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-34961.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> struct A
+{
+ static const int i __attribute__((aligned(__alignof(T)))) = 0; // { dg-error "not expanded|T" }
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35023.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35023.C
new file mode 100644
index 0000000..bc59023
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35023.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> int foo()
+{
+ T t; // { dg-error "parameter packs|T" }
+ return t;
+}
+
+void bar()
+{
+ foo<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35024.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35024.C
new file mode 100644
index 0000000..c20501f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35024.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> int foo()
+{
+ typename T::X x; // { dg-error "parameter packs|T" }
+ return x;
+}
+
+void bar()
+{
+ foo<int>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35026.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35026.C
new file mode 100644
index 0000000..2590f35
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35026.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename... T> struct A
+{
+ T* x[1]; // { dg-error "parameter packs|T" }
+};
+
+A<int> a;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35147.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35147.C
new file mode 100644
index 0000000..0827bee
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35147.C
@@ -0,0 +1,18 @@
+// { dg-do compile { target c++11 } }
+
+template<typename _Tp>
+ _Tp&& forward(_Tp&& __t) { return __t; } // { dg-message "note" }
+
+void f(...);
+
+template<typename... Args>
+void g(Args&&... args)
+{
+ f(forward<Args...>(args...)); // { dg-error "no matching" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 11 }
+}
+
+void h()
+{
+ g();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35242.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35242.C
new file mode 100644
index 0000000..9af855e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35242.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+struct A
+{
+ template<typename... T> struct B;
+};
+
+template<typename... T> struct A::B<T*> {}; // { dg-error "parameter packs|T" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35243.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35243.C
new file mode 100644
index 0000000..e38d339
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35243.C
@@ -0,0 +1,9 @@
+// { dg-do compile { target c++11 } }
+struct A {};
+
+template<typename... T> struct B : T...
+{
+ B() : T(x)... {} // { dg-error "not declared" }
+};
+
+B<A> b;
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35331.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35331.C
new file mode 100644
index 0000000..0128b61
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-35331.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target c++11 } }
+template<typename...> struct A;
+
+template<typename...T> struct A<T*> // { dg-error "not expanded|T" }
+{
+ friend void foo();
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-1.C
new file mode 100644
index 0000000..c047a19
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-1.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "note" }
+
+void f() { }
+
+template<class U, class... T>
+void f(){ f<T...>(); } // { dg-error "no matching" }
+
+int main()
+{
+ f<char>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C
new file mode 100644
index 0000000..21891f1
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C
@@ -0,0 +1,16 @@
+// { dg-do compile { target c++11 } }
+
+template<class U, class... T>
+void f() // { dg-message "note" }
+{
+ f<T...>(); // { dg-error "no matching" }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
+}
+
+template<>
+void f() { } // { dg-error "template-id" }
+
+int main()
+{
+ f<char>();
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-40092.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-40092.C
new file mode 100644
index 0000000..cad2643
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-40092.C
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+template <typename... Types> struct package {};
+
+template <int ArgGen> struct wrapper_gen {};
+
+template <int ArgNest> struct wrapper_nest
+{
+ typedef wrapper_gen<ArgNest> type_nest;
+};
+
+template <int... ArgPack>
+struct wrapper_pack
+{
+ typedef package<wrapper_gen <ArgPack>...> type_pack;
+ // incorrect error: expansion pattern 'wrapper_gen<ArgNest>'
+ // contains no argument packs
+};
+
+
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-51314.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-51314.C
new file mode 100644
index 0000000..8a5a66a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-51314.C
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++11 } }
+// { dg-prune-output "invalid" }
+
+template<int>struct A{};
+template<class...U>void f(U...){
+ A<sizeof...U> x; // { dg-error "surrounded by parentheses" }
+}
+
+
+template<int...> struct Indices;
+template<class> struct Next_increasing_indices;
+template<int...I> struct Next_increasing_indices<Indices<I...> > {
+ typedef Indices<I...,sizeof...I> type; // { dg-error "surrounded by parentheses" }
+};
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55323.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55323.C
new file mode 100644
index 0000000..e360a99
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55323.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+
+struct foo {
+ foo(int a, float b);
+};
+
+struct bar : foo {
+ template<typename... Args>
+ bar(Args&&... args) : foo(2, args){} // { dg-error "parameter packs" }
+};
+
+bar b(2,1.);
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55542.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55542.C
new file mode 100644
index 0000000..72d58b9
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/vt-55542.C
@@ -0,0 +1,22 @@
+// PR c++/55542
+// { dg-do compile { target c++11 } }
+
+template <typename ... P>
+struct B
+{
+ template <typename O>
+ B (O *o, void (O::*f) (P ... p)) {}
+};
+class C
+{
+ void foo (void *, int);
+ template <typename ... A>
+ void bar (A ... a);
+ B <void *> c;
+ B <void *, int> d;
+ C (int) : c (this, &C::bar), d (this, &C::foo) {}
+};
+template <typename ... A>
+void C::bar (A ...)
+{
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C
new file mode 100644
index 0000000..e07d33b
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C
@@ -0,0 +1,10 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-std=gnu++98 -Wc++11-compat" }
+int static_assert; // { dg-warning "is a keyword" }
+int nullptr; // { dg-warning "is a keyword" }
+
+void foo()
+{
+ static_assert = 5;
+ nullptr = 5;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C
new file mode 100644
index 0000000..324b009
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C
@@ -0,0 +1,5 @@
+// PR c++/50810
+// { dg-do compile { target c++11 } }
+// { dg-options "-std=gnu++98 -Wc++11-compat" }
+
+signed char data[] = { 0xff }; // { dg-warning "narrowing" }
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C
new file mode 100644
index 0000000..204b4ae
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C
@@ -0,0 +1,5 @@
+// PR c++/50810
+// { dg-do compile { target c++11 } }
+// { dg-options "-std=gnu++98 -Wc++11-compat -Wno-narrowing" }
+
+signed char data[] = { 0xff };