summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp0x
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-04-11 09:13:11 +0000
committer <>2014-04-23 12:05:38 +0000
commit6af3fdec2262dd94954acc5e426ef71cbd4521d3 (patch)
tree9be02de9a80f7935892a2d03741adee44723e65d /gcc/testsuite/g++.dg/cpp0x
parent19be2b4342ac32e9edc78ce6fed8f61b63ae98d1 (diff)
downloadgcc-tarball-6af3fdec2262dd94954acc5e426ef71cbd4521d3.tar.gz
Imported from /home/lorry/working-area/delta_gcc-tarball/gcc-4.7.3.tar.bz2.gcc-4.7.3
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C161
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C37
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C28
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C42
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alignof3.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alignof4.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto1.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto24.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto25.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto26.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto27.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto28.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto29.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto30.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto31.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto32.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto33.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto7.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/bracket3.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-98.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-99.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C28
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C54
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C48
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C44
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C106
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-union.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-using.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-virtual3.C42
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc1.C43
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc2.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc3.C63
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc4.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc5.C28
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dc6.C40
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype-1212.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype2.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype21.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype26.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype28.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype29.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype3.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype32.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype33.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype34.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype35.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype36.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype37.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype38.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype48.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted15.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted20.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted21.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted22.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted23.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted25.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted28.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted31.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted33.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted34.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted36.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/diag1.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum11.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum12.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum14.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum17.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum18.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum20.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum21a.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/enum21b.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/error4.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/error5.C107
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/error7.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/explicit6.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/explicit7.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/forw_enum10.C31
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/forw_enum11.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/forw_enum8.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/friend1.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/friend2.C40
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit-copy.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit11.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit12.C54
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit13.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit14.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit4.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit5.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit8.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-49216.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-array3.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C36
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C64
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-protected.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-pure.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-value.C35
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist-value2.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist13.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist17.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist36.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist49.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist5.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist50.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist52.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist53.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist54.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist55.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist56.C37
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist58.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist59.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist61.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist62.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist63.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist64.C29
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist7.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C28
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C33
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C42
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C37
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/named.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept11.C53
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept12.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept13.C78
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept14.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept15.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept16.C130
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept18.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept19.C29
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept20.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/not_special.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C26
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi1.C53
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi2.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi3.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi4.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi5.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi6.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nsdmi7.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr15.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr19.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr21.C41
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr23.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr24.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr25.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr26.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr28.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr29.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/overload2.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/override1.C61
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/override2.C54
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/override3.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr31431-2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr31431.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr31434.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr45908.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr47416.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr50901.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51150.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51216.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51225.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51313.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51420.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51463.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51547.C50
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51619.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr52841.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for11.C40
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for12.C116
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for13.C103
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for14.C95
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for15.C59
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for16.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for17.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for18.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for19.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for2.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for20.C36
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for21.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for22.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for24.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for3.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for5.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for9.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/49290.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/regress4.C62
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/regress/regress6.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-cast3.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-cast4.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-conv1.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-func.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-func2.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-func3.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-return.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-template1.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv1n.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv2n.C110
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv3n.C202
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv4n.C230
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv5n.C170
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv6n.C74
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/rv7n.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae10.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae11.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae12.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae13.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae14.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae15.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae16.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae17.C31
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae18.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae19.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae20.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae21.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae22.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae24.C29
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae25.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae26.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae28.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae29.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae30.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae31.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae8.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae9.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/static_assert3.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/static_assert5.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/static_assert6.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/temp_default2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing2.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing3.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing4.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing6.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing7.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing9.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-addr.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C41
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-args.C38
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-args2.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-concat.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-friend.C28
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-general.C52
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C63
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-inline.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C43
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C42
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C40
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C49
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C46
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-template.C51
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit_system_header6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/union1.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-default.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic-value1.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic103.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic105.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic107.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic111.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic112.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic117.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic118.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic119.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic120.C24
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic121.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic122.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic123.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic124.C29
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic125.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic128.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic129.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic131.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic132.C27
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic133.C46
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic134.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic2.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic20.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic35.C3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic4.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic42.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic60.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic65.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic74.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic82.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic83.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/vt-55542.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C4
440 files changed, 7931 insertions, 659 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C b/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C
new file mode 100644
index 0000000000..aad273792a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/Wzero-as-null-pointer-constant-1.C
@@ -0,0 +1,161 @@
+// { dg-options "-std=c++0x -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/testsuite/g++.dg/cpp0x/alias-decl-0.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C
new file mode 100644
index 0000000000..c5760cfe53
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-0.C
@@ -0,0 +1,37 @@
+// { dg-options "-std=c++0x" }
+
+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 don't have the same type, because Y and Z don't
+ // designate the same template ...
+ X<Y> y;
+ X<Z> z;
+
+ // ... So these must fail to compile.
+ f(z); // { dg-error "" }
+ g(y); // { dg-error "" }
+}
+
+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/testsuite/g++.dg/cpp0x/alias-decl-1.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C
new file mode 100644
index 0000000000..d0eda5ff1b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-1.C
@@ -0,0 +1,15 @@
+// { dg-options "-std=c++0x" }
+
+// 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 "partial specialization" }
+
+template <class U> using Ptr = U*;
+template<class U> struct Ptr<U*> {}; // { dg-error "partial specialization" }
+
+struct A {
+ using A = int;//{ dg-error "nested|has|same name as|class|in which|declared" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C
new file mode 100644
index 0000000000..733e791c2b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-10.C
@@ -0,0 +1,26 @@
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-11.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C
new file mode 100644
index 0000000000..43ef7ba45e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-11.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-12.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
new file mode 100644
index 0000000000..11c26865d9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
@@ -0,0 +1,4 @@
+// Origin: PR c++/51027
+// { dg-options "-std=c++0x" }
+
+using INT = int // { dg-error "expected|;|at end of input" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C
new file mode 100644
index 0000000000..8555154c63
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-13.C
@@ -0,0 +1,24 @@
+// Origin PR c++/51191
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-14.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C
new file mode 100644
index 0000000000..1a998022ad
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-14.C
@@ -0,0 +1,14 @@
+// Origin: PR c++/51145
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-15.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C
new file mode 100644
index 0000000000..b23e4029f7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C
@@ -0,0 +1,17 @@
+// Origin PR c++/51194
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-16.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C
new file mode 100644
index 0000000000..d66660a5f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-16.C
@@ -0,0 +1,28 @@
+// Origin PR c++/51143
+// { dg-options "-std=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;
+
+int main() { }
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C
new file mode 100644
index 0000000000..41b1c950fc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-17.C
@@ -0,0 +1,21 @@
+// Origin PR c++/51289
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/alias-decl-18.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C
new file mode 100644
index 0000000000..ba65561311
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C
@@ -0,0 +1,9 @@
+// Origin: PR c++/51541
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/alias-decl-2.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C
new file mode 100644
index 0000000000..6b5b42f7fd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-2.C
@@ -0,0 +1,33 @@
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-20.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C
new file mode 100644
index 0000000000..078d257187
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/alias-decl-3.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C
new file mode 100644
index 0000000000..5484efce19
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-3.C
@@ -0,0 +1,42 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/alias-decl-4.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C
new file mode 100644
index 0000000000..876944e23c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-4.C
@@ -0,0 +1,14 @@
+// { dg-options "-std=c++0x" }
+
+// [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/testsuite/g++.dg/cpp0x/alias-decl-5.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C
new file mode 100644
index 0000000000..1a4cbd5e5b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-5.C
@@ -0,0 +1,34 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/alias-decl-6.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C
new file mode 100644
index 0000000000..f60b2ea7fc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-6.C
@@ -0,0 +1,12 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/alias-decl-7.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
new file mode 100644
index 0000000000..96c349a0da
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-7.C
@@ -0,0 +1,23 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/alias-decl-8.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C
new file mode 100644
index 0000000000..c926df7539
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-8.C
@@ -0,0 +1,32 @@
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/alias-decl-9.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C
new file mode 100644
index 0000000000..dcf642d768
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-9.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+template <class T>
+struct A {
+ using Result = T;
+};
+template <class A> using Arg = typename A::Result;
+Arg<A<int>> b;
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
new file mode 100644
index 0000000000..63655286b0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
@@ -0,0 +1,12 @@
+// Origin: PR c++/51032
+// { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } }
+// { dg-options "-std=c++0x -gstabs+" }
+
+template <class C>
+struct A {
+ template<class U> using B = U*;
+ int a;
+};
+
+A<int> a;
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignof3.C b/gcc/testsuite/g++.dg/cpp0x/alignof3.C
new file mode 100644
index 0000000000..50c6ac915e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alignof3.C
@@ -0,0 +1,6 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x -pedantic" }
+int main(void)
+{
+ alignof(void (void)); // { dg-warning "function type" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignof4.C b/gcc/testsuite/g++.dg/cpp0x/alignof4.C
new file mode 100644
index 0000000000..92d636faf0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alignof4.C
@@ -0,0 +1,7 @@
+// PR c++/51316
+// { dg-options "-std=c++0x" }
+
+int main()
+{
+ alignof(int []);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto1.C b/gcc/testsuite/g++.dg/cpp0x/auto1.C
index 9e274b6223..f5c0ea6e4d 100644
--- a/gcc/testsuite/g++.dg/cpp0x/auto1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto1.C
@@ -1,8 +1,8 @@
-// { dg-options "-std=c++98 -Wc++0x-compat" }
+// { dg-options "-std=c++98 -Wc++11-compat" }
-// Test warning for use of auto in C++98 mode with C++0x
+// Test warning for use of auto in C++98 mode with C++11
// compatibility warnings
void f()
{
- auto int x = 5; // { dg-warning "will change meaning" }
+ auto int x = 5; // { dg-warning "changes meaning" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto24.C b/gcc/testsuite/g++.dg/cpp0x/auto24.C
new file mode 100644
index 0000000000..b024ad5b2a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto24.C
@@ -0,0 +1,5 @@
+// PR c++/48599
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+int v[1];
+auto (*p)[1] = &v; // { dg-error "array of .auto" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto25.C b/gcc/testsuite/g++.dg/cpp0x/auto25.C
new file mode 100644
index 0000000000..2917c0e197
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto25.C
@@ -0,0 +1,12 @@
+// PR c++/42056
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/auto26.C b/gcc/testsuite/g++.dg/cpp0x/auto26.C
new file mode 100644
index 0000000000..6e55aa451a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto26.C
@@ -0,0 +1,21 @@
+// PR c++/43321
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/auto27.C b/gcc/testsuite/g++.dg/cpp0x/auto27.C
new file mode 100644
index 0000000000..1921763607
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto27.C
@@ -0,0 +1,6 @@
+// PR c++/51186
+
+auto main()->int // { dg-error "std=" "std" { target c++98 } }
+ // { dg-error "auto" "auto" { target c++98 } 3 }
+ // { dg-error "no type" "no type" { target c++98 } 3 }
+{ }
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto28.C b/gcc/testsuite/g++.dg/cpp0x/auto28.C
new file mode 100644
index 0000000000..8d250166a8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto28.C
@@ -0,0 +1,4 @@
+// PR c++/51404
+// { dg-options -std=c++0x }
+
+int i = auto().x; // { dg-error "invalid use of" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto29.C b/gcc/testsuite/g++.dg/cpp0x/auto29.C
new file mode 100644
index 0000000000..818745751a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto29.C
@@ -0,0 +1,25 @@
+// PR c++/51401
+// { dg-do compile }
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/auto30.C b/gcc/testsuite/g++.dg/cpp0x/auto30.C
new file mode 100644
index 0000000000..d26e290f5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto30.C
@@ -0,0 +1,9 @@
+// Origin PR c++/51473
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/auto31.C b/gcc/testsuite/g++.dg/cpp0x/auto31.C
new file mode 100644
index 0000000000..26a656063c
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/auto32.C b/gcc/testsuite/g++.dg/cpp0x/auto32.C
new file mode 100644
index 0000000000..2aad34e40a
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/auto33.C b/gcc/testsuite/g++.dg/cpp0x/auto33.C
new file mode 100644
index 0000000000..dade5a8ba2
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/auto7.C b/gcc/testsuite/g++.dg/cpp0x/auto7.C
index 9ef5a80eb1..3b3b829016 100644
--- a/gcc/testsuite/g++.dg/cpp0x/auto7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto7.C
@@ -7,7 +7,7 @@ auto j; // { dg-error "has no initializer" }
template<int> struct A
{
- static auto k = 7;
+ static auto k = 7; // { dg-error "non-const" }
static auto l; // { dg-error "has no initializer" }
- auto m; // { dg-error "has no initializer" }
+ auto m; // { dg-error "non-static data member declared" }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/bracket3.C b/gcc/testsuite/g++.dg/cpp0x/bracket3.C
index 4ef7a0e9d3..f86aa041a2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/bracket3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/bracket3.C
@@ -1,10 +1,10 @@
-// { dg-options "-std=c++98 -Wc++0x-compat" }
+// { dg-options "-std=c++98 -Wc++11-compat" }
template<int N> struct X {};
-X<1 >> 2> x; // { dg-warning "will be treated as|suggest parentheses" }
+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 "will be treated as|suggest parentheses" }
+Foo<Y () >> 5> r; // { dg-warning "is treated as|suggest parentheses" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
new file mode 100644
index 0000000000..3c51c2cbf5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-46336.C
@@ -0,0 +1,14 @@
+// PR c++/46336
+// { dg-options -std=c++0x }
+
+extern "C" {
+ enum A { };
+ inline constexpr A
+ f(A a, A b) // { dg-error "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/testsuite/g++.dg/cpp0x/constexpr-47969.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C
new file mode 100644
index 0000000000..c950a3642f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C
@@ -0,0 +1,11 @@
+// PR c++/47969
+// { dg-options -std=c++0x }
+
+struct A
+{
+ // constexpr operator int () { return 1; }
+};
+
+constexpr A a = A();
+
+int ar[a]; // { dg-error "has non-integral type" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
index 5124f7c7f4..a6cf408075 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
@@ -14,7 +14,7 @@ struct s {
int v;
};
-constexpr s bang; // { dg-error "" }
+constexpr s bang; // { dg-message "" }
struct R {
int i,j;
@@ -33,7 +33,7 @@ struct T {
constexpr T t1;
// Ill-formed (diagnostic required)
-constexpr T t2(t1); // { dg-error "" }
+constexpr T t2(t1); // { dg-message "" }
// Well-formed
struct U {
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C
new file mode 100644
index 0000000000..3fe3dcb86c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-49776.C
@@ -0,0 +1,17 @@
+// PR c++/49776
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-51369.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C
new file mode 100644
index 0000000000..6606be8b6f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C
@@ -0,0 +1,12 @@
+// PR c++/51369
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+constexpr int x[2][2] = {};
+
+template<int>
+void
+foo ()
+{
+ x[0][0];
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
new file mode 100644
index 0000000000..9f878780c7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-52672.C
@@ -0,0 +1,8 @@
+// PR c++/52672
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+typedef unsigned long * 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/testsuite/g++.dg/cpp0x/constexpr-98.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
index 4ae3944c34..1a0189b56e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-98.C
@@ -1,4 +1,4 @@
// { dg-options "-std=c++98" }
-constexpr int i = 42; // { dg-message "std=c\\+\\+0x" }
+constexpr int i = 42; // { dg-message "std=c\\+\\+11" }
// { dg-error "constexpr" "" { target *-*-* } 3 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
new file mode 100644
index 0000000000..13a5ea3e6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C
@@ -0,0 +1,13 @@
+// Origin PR c++/51462
+// { dg-options "-std=c++11" }
+
+struct A
+{
+ int i = 0;
+};
+
+struct B
+{
+ A a;
+ constexpr B() : a(0) {} // { dg-error "no matching function" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C
new file mode 100644
index 0000000000..e83f142300
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-abi1.C
@@ -0,0 +1,16 @@
+// PR c++/47301
+// { dg-options "-std=c++0x -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/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C
new file mode 100644
index 0000000000..44775c0703
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr7.C
@@ -0,0 +1,20 @@
+// PR c++/49290
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-builtin1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C
new file mode 100644
index 0000000000..b3f5576360
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-builtin1.C
@@ -0,0 +1,25 @@
+// PR c++/49813
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-cache1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C
new file mode 100644
index 0000000000..b6d7b64713
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C
@@ -0,0 +1,9 @@
+// PR c++/51433
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-compound.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C
new file mode 100644
index 0000000000..81fcc54b3e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-compound.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+constexpr int f()
+{
+ { // { dg-error "" }
+ return 1;
+ }
+ { } // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-const1.C
new file mode 100644
index 0000000000..6ee72256e2
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/constexpr-ctor11.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C
new file mode 100644
index 0000000000..4b526eaa79
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor11.C
@@ -0,0 +1,16 @@
+// PR c++/55856
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/constexpr-ctor12.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C
new file mode 100644
index 0000000000..a5a4b4d14a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C
@@ -0,0 +1,14 @@
+// PR c++/55753
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/constexpr-decl.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C
index 0a3fcb6562..8c46fab333 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-decl.C
@@ -2,8 +2,8 @@
// { dg-options -std=c++0x }
struct S {
- static constexpr int size; // { dg-error "must have an initializer" }
- // { dg-error "previous declaration" "" { target *-*-* } 5 }
+ static constexpr int size; // { dg-error "must have an initializer" "must have" }
+ // { dg-error "previous declaration" "previous" { target *-*-* } 5 }
};
const int limit = 2 * S::size;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C
new file mode 100644
index 0000000000..d3868b599a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-delegating.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C
new file mode 100644
index 0000000000..a020888767
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating.C
@@ -0,0 +1,15 @@
+// PR c++/51526
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-delegating2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C
new file mode 100644
index 0000000000..c85ed2e819
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-delegating2.C
@@ -0,0 +1,28 @@
+// PR c++/51723
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-diag1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
index 183d3f768f..cbd4983e84 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
@@ -13,8 +13,8 @@ struct B { B(); operator int(); };
constexpr A<int> ai = { 42 };
constexpr int i = ai.f();
-constexpr int b = A<B>().f(); // { dg-error "not a constexpr function" }
+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 function" }
+constexpr int x = f(B()); // { dg-error "constexpr" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
new file mode 100644
index 0000000000..100c17edb4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
@@ -0,0 +1,54 @@
+// PR c++/45923
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-diag4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C
new file mode 100644
index 0000000000..371190e978
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag4.C
@@ -0,0 +1,25 @@
+// Origin: PR c++/51633
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/constexpr-diag5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C
new file mode 100644
index 0000000000..c0cbfdd1c5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag5.C
@@ -0,0 +1,48 @@
+// Origin: PR c++/51633
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/constexpr-ex1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
index 4ab4677805..3df7956fd2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ex1.C
@@ -88,7 +88,7 @@ struct resource {
}
};
constexpr resource f(resource d)
-{ return d; } // { dg-error "not .constexpr" }
-constexpr resource d = f(9); // { dg-error "resource" }
+{ return d; } // { dg-error "non-constexpr" }
+constexpr resource d = f(9); // { dg-message "constexpr" }
// 4.4 floating-point constant expressions
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
index f1d9ccee79..57782cf349 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C
@@ -19,5 +19,5 @@ struct C
constexpr int i = f(C<int>());
constexpr int j = C<int>().m(C<int>());
-constexpr int k = C<double>().m(A()); // { dg-error "not a constexpr function" }
-constexpr int l = g(C<double>(),A()); // { dg-error "not a constexpr function" }
+constexpr int k = C<double>().m(A()); // { dg-error "constexpr" }
+constexpr int l = g(C<double>(),A()); // { dg-error "constexpr" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C
new file mode 100644
index 0000000000..73ddc8f5c2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-generated1.C
@@ -0,0 +1,21 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-ice2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C
index 35643b990c..856246fcc9 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice2.C
@@ -1,3 +1,3 @@
// { dg-options -std=c++0x }
int x;
-constexpr int& rx = x; // { dg-error "int&" }
+constexpr int& rx = x;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
new file mode 100644
index 0000000000..e1ee36dfc9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
@@ -0,0 +1,9 @@
+// PR c++/51612
+// { dg-options -std=c++0x }
+
+struct A {};
+
+struct B : virtual A
+{
+ constexpr B() { } // { dg-error "has virtual base classes" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C
new file mode 100644
index 0000000000..b88ec66c9f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice5.C
@@ -0,0 +1,13 @@
+// PR c++/51621
+// { dg-options -std=c++0x }
+
+struct A
+{
+ A() {}
+};
+
+struct B
+{
+ A a[1];
+ constexpr B() : a() {} // { dg-error "non-constant|non-constexpr" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C
new file mode 100644
index 0000000000..1a494bb323
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C
@@ -0,0 +1,11 @@
+// PR c++/51327
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
index 71372d226a..3f40e29aec 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C
@@ -2,6 +2,6 @@
struct A
{
- static constexpr A a = 1; // { dg-error "incomplete|literal" }
+ static constexpr A a = 1; // { dg-error "incomplete" }
constexpr A(int i) { }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
index dc0b7429dc..f61535f06b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C
@@ -28,4 +28,4 @@ struct D
C<D> c;
};
-constexpr D d {}; // { dg-error "not a constexpr function" }
+constexpr D d {}; // { dg-error "non-constexpr function" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C
new file mode 100644
index 0000000000..8151857569
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist4.C
@@ -0,0 +1,8 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-initlist6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C
new file mode 100644
index 0000000000..6b822a1f77
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist6.C
@@ -0,0 +1,27 @@
+// PR c++/55419
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/constexpr-is_literal.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
index d1b95437db..82514ed865 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-is_literal.C
@@ -33,6 +33,7 @@ YES(NotLiteral (NotLiteral::*)(NotLiteral));
struct A {
A(const A&) = default;
+ A(int);
};
NO(A); // no constexpr ctor other than copy
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C
new file mode 100644
index 0000000000..a14d611cee
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-mutable1.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C
new file mode 100644
index 0000000000..91e93fd91b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept6.C
@@ -0,0 +1,10 @@
+// PR c++/51305
+// { dg-options -std=c++0x }
+
+constexpr bool ok() noexcept
+{
+ typedef int type;
+ return true;
+}
+
+constexpr auto x = ok();
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C
index 7ac53db489..6381323cc0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-nullptr.C
@@ -2,5 +2,5 @@
constexpr int zero() { return 0; }
-void* ptr1 = zero(); // #1
-constexpr void* ptr2 = zero(); // #2
+void* ptr1 = zero(); // { dg-error "int" }
+constexpr void* ptr2 = zero(); // { dg-error "int" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
index 4ff398bf1f..6c9d466441 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-object1.C
@@ -18,8 +18,7 @@ extern constexpr int i2; // { dg-error "definition" }
// error: missing initializer
constexpr A1 a2; // { dg-error "uninitialized const" }
-// error: duplicate cv
-const constexpr A1 a3 = A1(); // { dg-error "both .const. and .constexpr. cannot" }
+const constexpr A1 a3 = A1();
volatile constexpr A1 a4 = A1(); // { dg-error "both .volatile. and .constexpr. cannot" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C
new file mode 100644
index 0000000000..bccec73bb0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrsub.C
@@ -0,0 +1,14 @@
+// PR c++/51489
+// DR 1313
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/constexpr-ref1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C
new file mode 100644
index 0000000000..482e1ba369
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref1.C
@@ -0,0 +1,44 @@
+// PR c++/49172
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/constexpr-ref2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C
new file mode 100644
index 0000000000..2a86eb765c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref2.C
@@ -0,0 +1,17 @@
+// Negative reference variable tests.
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-ref3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C
new file mode 100644
index 0000000000..24cc9c8244
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref3.C
@@ -0,0 +1,10 @@
+// PR c++/50298
+// { dg-options -std=c++0x }
+
+int global_variable;
+
+template <class T> struct X {
+ static constexpr T r = global_variable;
+};
+
+X<int&> x;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C
new file mode 100644
index 0000000000..6ae355a273
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref4.C
@@ -0,0 +1,18 @@
+// PR c++/54777
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-rom.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C
new file mode 100644
index 0000000000..5213d5930a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-rom.C
@@ -0,0 +1,13 @@
+// PR c++/49673: check that test_data goes into .rodata
+// { dg-options -std=c++0x }
+// { dg-additional-options -G0 { target { { alpha*-*-* frv*-*-* ia64-*-* lm32*-*-* m32r*-*-* microblaze*-*-* mips*-*-* powerpc*-*-* rs6000*-*-* score*-*-* } && { ! { *-*-darwin* *-*-aix* alpha*-*-osf* alpha*-*-*vms* } } } } }
+// { dg-final { scan-assembler "\\.rdata" { target mips*-*-* } } }
+// { dg-final { scan-assembler "rodata" { target { { *-*-linux-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/testsuite/g++.dg/cpp0x/constexpr-static7.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C
index ba4a251840..e46ddafd70 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C
@@ -3,6 +3,8 @@
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/testsuite/g++.dg/cpp0x/constexpr-static8.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
new file mode 100644
index 0000000000..7c84cf8b07
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-static8.C
@@ -0,0 +1,7 @@
+// PR c++/50258
+// { dg-options "-std=c++0x -fpermissive" }
+
+struct Foo {
+ static const double d = 3.14; // { dg-warning "constexpr" }
+};
+const double Foo::d; // { dg-warning "constexpr" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-temp1.C
new file mode 100644
index 0000000000..d065436327
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/constexpr-template1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C
new file mode 100644
index 0000000000..88077231b0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template1.C
@@ -0,0 +1,27 @@
+// PR c++/50248, DR 1358
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-template2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C
new file mode 100644
index 0000000000..6786d1651e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template2.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-template3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C
new file mode 100644
index 0000000000..75b2fc4634
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-template3.C
@@ -0,0 +1,9 @@
+// { dg-options -std=c++0x }
+
+struct A { constexpr operator int() { return 42; } };
+
+template<class T>
+struct B {
+ static const int versionConst = A();
+ enum { versionEnum = versionConst };
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-tuple.C
new file mode 100644
index 0000000000..f59cd84530
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/constexpr-union.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C
index b4613058ee..3c7a7f38ec 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-union.C
@@ -1,5 +1,5 @@
// Test that we don't have to deal with type punning
-// FIXME Mike Miller thinks it should work
+// DR 1188 says this is ill-formed
// { dg-options -std=c++0x }
union U
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C
new file mode 100644
index 0000000000..0bf2aa7e2b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-union2.C
@@ -0,0 +1,18 @@
+// PR c++/51675
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-union3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C
new file mode 100644
index 0000000000..bac9cabfe5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-union3.C
@@ -0,0 +1,12 @@
+// PR c++/51675
+// { dg-options -std=c++11 }
+
+union foo
+{
+ int x;
+ short y;
+
+ constexpr foo(): x(0) { }
+};
+
+constexpr foo f;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C
new file mode 100644
index 0000000000..fc794e9abd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-using.C
@@ -0,0 +1,27 @@
+// Core issue 898
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-using2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C
new file mode 100644
index 0000000000..6b282813e5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C
@@ -0,0 +1,18 @@
+// PR c++/49520
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/constexpr-virtual2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual2.C
new file mode 100644
index 0000000000..86040a31b1
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/constexpr-virtual3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual3.C
new file mode 100644
index 0000000000..de446bcfd3
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/constexpr-virtual4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C
new file mode 100644
index 0000000000..32cee96984
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual4.C
@@ -0,0 +1,18 @@
+// PR c++/56291
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/dc1.C b/gcc/testsuite/g++.dg/cpp0x/dc1.C
new file mode 100644
index 0000000000..ba2e4f4fd0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dc1.C
@@ -0,0 +1,43 @@
+// { dg-do compile }
+// { dg-options --std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/dc2.C b/gcc/testsuite/g++.dg/cpp0x/dc2.C
new file mode 100644
index 0000000000..dda0b9fc69
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dc2.C
@@ -0,0 +1,23 @@
+// { dg-do compile }
+// { dg-options --std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/dc3.C b/gcc/testsuite/g++.dg/cpp0x/dc3.C
new file mode 100644
index 0000000000..b411c997d8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dc3.C
@@ -0,0 +1,63 @@
+// { dg-do compile }
+// { dg-options --std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/dc4.C b/gcc/testsuite/g++.dg/cpp0x/dc4.C
new file mode 100644
index 0000000000..634b5498de
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/dc5.C b/gcc/testsuite/g++.dg/cpp0x/dc5.C
new file mode 100644
index 0000000000..0052b32111
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dc5.C
@@ -0,0 +1,28 @@
+// { dg-do run }
+// { dg-options "--std=c++0x" }
+
+#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/testsuite/g++.dg/cpp0x/dc6.C b/gcc/testsuite/g++.dg/cpp0x/dc6.C
new file mode 100644
index 0000000000..b16c0b47ba
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/decltype-1212.C b/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C
new file mode 100644
index 0000000000..38393d3b87
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype-1212.C
@@ -0,0 +1,11 @@
+// Core 1212
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/decltype2.C b/gcc/testsuite/g++.dg/cpp0x/decltype2.C
index 186d75b725..e0c5900304 100644
--- a/gcc/testsuite/g++.dg/cpp0x/decltype2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype2.C
@@ -45,8 +45,8 @@ int bar(char);
int bar(int);
CHECK_DECLTYPE(decltype(foo), int(char));
-decltype(bar) z; // { dg-error "overload" }
-// { dg-error "invalid type" "" { target *-*-* } 48 }
+decltype(bar) z; // { dg-error "overload" "overload" }
+// { dg-error "invalid type" "invalid" { target *-*-* } 48 }
CHECK_DECLTYPE(decltype(&foo), int(*)(char));
CHECK_DECLTYPE(decltype(*&foo), int(&)(char));
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype21.C b/gcc/testsuite/g++.dg/cpp0x/decltype21.C
new file mode 100644
index 0000000000..733725626c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype21.C
@@ -0,0 +1,34 @@
+// PR c++/6709 (DR 743)
+// PR c++/42603 (DR 950)
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/decltype26.C b/gcc/testsuite/g++.dg/cpp0x/decltype26.C
new file mode 100644
index 0000000000..a81d411558
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype26.C
@@ -0,0 +1,16 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/decltype28.C b/gcc/testsuite/g++.dg/cpp0x/decltype28.C
new file mode 100644
index 0000000000..c97fd202c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype28.C
@@ -0,0 +1,16 @@
+// PR c++/44175
+// { dg-options -std=c++0x }
+
+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))
+ft (F f, typename enable_if<N==0, int>::type) {} // { dg-error "depth" }
+
+int main() {
+ ft<struct a*, 2> (0, 0); // { dg-message "from here" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype29.C b/gcc/testsuite/g++.dg/cpp0x/decltype29.C
new file mode 100644
index 0000000000..70fe4412dc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype29.C
@@ -0,0 +1,19 @@
+// PR c++/44175
+// { dg-options -std=c++0x }
+
+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()))
+ft() {} // { dg-error "depth" }
+
+int main() {
+ ft<struct a*, 0>(); // { dg-error "no match|wrong number" }
+}
+
+// { dg-prune-output "note" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype3.C b/gcc/testsuite/g++.dg/cpp0x/decltype3.C
index aeacfae091..b44dd17c8e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/decltype3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype3.C
@@ -55,8 +55,8 @@ public:
};
CHECK_DECLTYPE(decltype(aa.*&A::a), int&);
-decltype(aa.*&A::b) zz; // { dg-error "cannot create pointer to reference member" }
-// { dg-error "invalid type" "" { target *-*-* } 58 }
+decltype(aa.*&A::b) zz; // { dg-error "cannot create pointer to reference member" "cannot" }
+// { dg-error "invalid type" "invalid type" { target *-*-* } 58 }
CHECK_DECLTYPE(decltype(caa.*&A::a), const int&);
class X {
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype32.C b/gcc/testsuite/g++.dg/cpp0x/decltype32.C
new file mode 100644
index 0000000000..66731cc947
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype32.C
@@ -0,0 +1,12 @@
+// PR c++/50075
+// { dg-options -std=c++0x }
+
+template <typename T>
+auto make_array(const T& il) -> // { dg-error "not declared" }
+decltype(make_array(il))
+{ }
+
+int main()
+{
+ int z = make_array(1); // { dg-error "no match" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype33.C b/gcc/testsuite/g++.dg/cpp0x/decltype33.C
new file mode 100644
index 0000000000..d022d16648
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype33.C
@@ -0,0 +1,18 @@
+// PR c++/50084
+// { dg-options "-std=c++0x -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/testsuite/g++.dg/cpp0x/decltype34.C b/gcc/testsuite/g++.dg/cpp0x/decltype34.C
new file mode 100644
index 0000000000..fbd15c2797
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype34.C
@@ -0,0 +1,19 @@
+// PR c++/50870
+// { dg-options "-std=gnu++0x" }
+
+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/testsuite/g++.dg/cpp0x/decltype35.C b/gcc/testsuite/g++.dg/cpp0x/decltype35.C
new file mode 100644
index 0000000000..d1fd47638a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype35.C
@@ -0,0 +1,15 @@
+// PR c++/50870
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/decltype36.C b/gcc/testsuite/g++.dg/cpp0x/decltype36.C
new file mode 100644
index 0000000000..f3dfed992c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype36.C
@@ -0,0 +1,21 @@
+// PR c++/51265
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/decltype37.C b/gcc/testsuite/g++.dg/cpp0x/decltype37.C
new file mode 100644
index 0000000000..c885e9a076
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/decltype38.C b/gcc/testsuite/g++.dg/cpp0x/decltype38.C
new file mode 100644
index 0000000000..97ebb33a03
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/decltype48.C b/gcc/testsuite/g++.dg/cpp0x/decltype48.C
new file mode 100644
index 0000000000..5aa0174a1e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype48.C
@@ -0,0 +1,16 @@
+// PR c++/56059
+// { dg-options -std=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>() ...))>
+foo(); // { dg-error "no match" }
+
+int main()
+{
+ foo<int, int>(); // { dg-error "no match" }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted15.C b/gcc/testsuite/g++.dg/cpp0x/defaulted15.C
index 4c5b11c9e1..0a47c20f77 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted15.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted15.C
@@ -54,5 +54,5 @@ struct G: public F
struct H
{
- virtual ~H() = default; // { dg-error "declared virtual" }
+ virtual ~H() = default;
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted20.C b/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
index 5d536a97ef..9b8c697aba 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
@@ -2,13 +2,12 @@
// { dg-options -std=c++0x }
struct A {
- A(A&&) = default; // { dg-message "A::A|no known conversion" }
+ A(A&&) = default;
};
struct B {
const A a;
B(const B&) = default;
- B(B&&) = default; // { dg-error "implicitly deleted|no match" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 10 }
+ B(B&&) = default; // { dg-error "implicitly deleted|use of deleted" }
};
void g(B); // { dg-error "argument 1" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted21.C b/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
index 3e740331d8..51505dc460 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
@@ -3,7 +3,8 @@
struct U {
U();
- U(U const&);
+private:
+ U(U const&); // { dg-error "private" }
};
struct X {
@@ -12,8 +13,8 @@ struct X {
X(X&&);
};
-X::X(X&&)=default; // { dg-error "implicitly deleted" }
-// { dg-error "does not have a move constructor" "" { target *-*-* } 15 }
+X::X(X&&)=default; // { dg-message "implicitly deleted" }
+// { dg-prune-output "within this context" }
X f() {
return X();
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted22.C b/gcc/testsuite/g++.dg/cpp0x/defaulted22.C
new file mode 100644
index 0000000000..61e9d32052
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted22.C
@@ -0,0 +1,23 @@
+// Test that a virtual defaulted constructor is still virtual.
+// { dg-do run }
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/defaulted23.C b/gcc/testsuite/g++.dg/cpp0x/defaulted23.C
new file mode 100644
index 0000000000..5b4438ddd0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted23.C
@@ -0,0 +1,27 @@
+// Test for checking of exception specifications on defaulted fns
+// { dg-options -std=c++0x }
+
+struct A
+{
+ A() noexcept = default;
+};
+
+struct B
+{
+ B() throw (int) = default; // { dg-error "exception-specification that differs from the implicit declaration" }
+};
+
+struct C
+{
+ C() throw (int) { }
+};
+
+struct D: C
+{
+ D() throw (int) = default;
+};
+
+struct E
+{
+ E() = default;
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted25.C b/gcc/testsuite/g++.dg/cpp0x/defaulted25.C
new file mode 100644
index 0000000000..2a38fedb24
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted25.C
@@ -0,0 +1,10 @@
+// PR c++/48930
+// { dg-options -std=c++0x }
+// { dg-prune-output "note" }
+
+struct A
+{
+ A(const A&) = default;
+};
+
+A a; // { dg-error "no match" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted28.C b/gcc/testsuite/g++.dg/cpp0x/defaulted28.C
new file mode 100644
index 0000000000..bcbf763f6d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted28.C
@@ -0,0 +1,17 @@
+// PR c++/49102
+// PR c++/50034
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/defaulted31.C b/gcc/testsuite/g++.dg/cpp0x/defaulted31.C
new file mode 100644
index 0000000000..de6a29854a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted31.C
@@ -0,0 +1,16 @@
+// PR c++/39164
+// { dg-options -std=c++0x }
+
+struct A
+{
+ A() { } // { dg-error "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/testsuite/g++.dg/cpp0x/defaulted33.C b/gcc/testsuite/g++.dg/cpp0x/defaulted33.C
new file mode 100644
index 0000000000..2f11c1369d
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/defaulted34.C b/gcc/testsuite/g++.dg/cpp0x/defaulted34.C
new file mode 100644
index 0000000000..0821992673
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted34.C
@@ -0,0 +1,10 @@
+// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "__cxa_deleted_virtual" } }
+
+struct A
+{
+ virtual void f();
+ virtual ~A() = delete;
+};
+
+void A::f() {}
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted36.C b/gcc/testsuite/g++.dg/cpp0x/defaulted36.C
new file mode 100644
index 0000000000..1360f608e6
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/diag1.C b/gcc/testsuite/g++.dg/cpp0x/diag1.C
new file mode 100644
index 0000000000..b3f30bcd0b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/diag1.C
@@ -0,0 +1,32 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/enum11.C b/gcc/testsuite/g++.dg/cpp0x/enum11.C
new file mode 100644
index 0000000000..156c765bea
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum11.C
@@ -0,0 +1,14 @@
+// PR c++/48969
+// { dg-options "-std=c++0x -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/testsuite/g++.dg/cpp0x/enum12.C b/gcc/testsuite/g++.dg/cpp0x/enum12.C
new file mode 100644
index 0000000000..b2ec91990e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum12.C
@@ -0,0 +1,18 @@
+// PR c++/48780
+// { dg-options "-std=c++0x -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/testsuite/g++.dg/cpp0x/enum14.C b/gcc/testsuite/g++.dg/cpp0x/enum14.C
new file mode 100644
index 0000000000..709b201d1f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum14.C
@@ -0,0 +1,12 @@
+// PR c++/48106
+// { dg-options -std=c++0x }
+
+enum class E : char
+{
+ e
+};
+
+bool operator&(E e, char m)
+{
+ return static_cast<int>(e) & m;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum17.C b/gcc/testsuite/g++.dg/cpp0x/enum17.C
new file mode 100644
index 0000000000..8ba827e50f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum17.C
@@ -0,0 +1,17 @@
+// PR c++/48536
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+#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/testsuite/g++.dg/cpp0x/enum18.C b/gcc/testsuite/g++.dg/cpp0x/enum18.C
index 5575ca6ce9..306ed8259f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/enum18.C
+++ b/gcc/testsuite/g++.dg/cpp0x/enum18.C
@@ -2,7 +2,7 @@
// { dg-options -std=c++0x }
int main(void) {
- enum e {};
- e ev;
- ev.e::~e_u(); // { dg-error "" }
+ enum e {};
+ e ev;
+ ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum20.C b/gcc/testsuite/g++.dg/cpp0x/enum20.C
new file mode 100644
index 0000000000..e5dc186e4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum20.C
@@ -0,0 +1,5 @@
+// PR c++/47635
+// { dg-options -std=c++0x }
+
+enum A { };
+void A::f() { } // { dg-error "not a class" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum21a.C b/gcc/testsuite/g++.dg/cpp0x/enum21a.C
new file mode 100644
index 0000000000..5526811a63
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/enum21b.C b/gcc/testsuite/g++.dg/cpp0x/enum21b.C
new file mode 100644
index 0000000000..48989128d8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum21b.C
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-pedantic -std=c++0x" }
+
+enum x { y, };
diff --git a/gcc/testsuite/g++.dg/cpp0x/error4.C b/gcc/testsuite/g++.dg/cpp0x/error4.C
index 29a1cddab1..064c2f2f62 100644
--- a/gcc/testsuite/g++.dg/cpp0x/error4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/error4.C
@@ -10,7 +10,7 @@ struct S {
static U get(const volatile T&);
template<typename U>
- static decltype(*declval<U>()) get(...);
+ static decltype(*declval<U>()) get(...); // { dg-error "operator*" }
typedef decltype(get<T>(declval<T>())) type; // { dg-error "no match" }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/error5.C b/gcc/testsuite/g++.dg/cpp0x/error5.C
new file mode 100644
index 0000000000..1931926422
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/error5.C
@@ -0,0 +1,107 @@
+// PR c++/49181
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/error7.C b/gcc/testsuite/g++.dg/cpp0x/error7.C
new file mode 100644
index 0000000000..0dfbf9f040
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/error7.C
@@ -0,0 +1,10 @@
+// Test for printing the type of T{} in error messages.
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/explicit6.C b/gcc/testsuite/g++.dg/cpp0x/explicit6.C
new file mode 100644
index 0000000000..0d620be080
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/explicit6.C
@@ -0,0 +1,11 @@
+// PR c++/47080
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/explicit7.C b/gcc/testsuite/g++.dg/cpp0x/explicit7.C
new file mode 100644
index 0000000000..7a0b73e9ba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/explicit7.C
@@ -0,0 +1,17 @@
+// [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-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/fntmpdefarg2.C b/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C
index 12cc83659c..d94843c1fe 100644
--- a/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg2.C
@@ -4,11 +4,21 @@
struct B { };
struct D : B { };
struct A {
- template<typename T = void> operator D&();
+ template<typename T = void> operator D&(); // { dg-message "template conversion" }
operator long();
};
void f(long);
void f(B&);
-int main() { f(A()); }
+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/testsuite/g++.dg/cpp0x/fntmpdefarg4.C b/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C
new file mode 100644
index 0000000000..0248b60599
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg4.C
@@ -0,0 +1,6 @@
+// PR c++/55724
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/forw_enum10.C b/gcc/testsuite/g++.dg/cpp0x/forw_enum10.C
new file mode 100644
index 0000000000..a57c0a9f41
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/forw_enum10.C
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//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/testsuite/g++.dg/cpp0x/forw_enum11.C b/gcc/testsuite/g++.dg/cpp0x/forw_enum11.C
new file mode 100644
index 0000000000..dd5fd9be78
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/forw_enum11.C
@@ -0,0 +1,24 @@
+// { dg-do compile }
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+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/testsuite/g++.dg/cpp0x/forw_enum8.C b/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C
index c87aa5bf65..69e73119e0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C
+++ b/gcc/testsuite/g++.dg/cpp0x/forw_enum8.C
@@ -15,7 +15,7 @@ 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 "instantiated from here" }
+template struct S2<short>; // { dg-message "required from here" }
//This error is diagnosed at compilation time
template<typename T> struct S3
diff --git a/gcc/testsuite/g++.dg/cpp0x/friend1.C b/gcc/testsuite/g++.dg/cpp0x/friend1.C
new file mode 100644
index 0000000000..2cf4c3c715
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/friend1.C
@@ -0,0 +1,22 @@
+// From N1791
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/friend2.C b/gcc/testsuite/g++.dg/cpp0x/friend2.C
new file mode 100644
index 0000000000..39276a05ac
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/friend2.C
@@ -0,0 +1,40 @@
+// PR c++/47721
+// { dg-options -std=c++0x }
+
+// 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/testsuite/g++.dg/cpp0x/implicit-copy.C b/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
index 861fe201f1..c3f6b85e24 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
@@ -3,13 +3,13 @@ struct S
{
S();
private:
- S(S const &&); // { dg-error "" }
- S & operator=(S const &&); // { dg-error "" }
+ S(S const &&);
+ S & operator=(S const &&);
};
void f()
{
S a;
- S b(a); // { dg-error "" }
- a = b; // { dg-error "" }
+ S b(a); // { dg-error "deleted" }
+ a = b; // { dg-error "deleted" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit11.C b/gcc/testsuite/g++.dg/cpp0x/implicit11.C
new file mode 100644
index 0000000000..7ec8e95dcb
--- /dev/null
+++ b/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-options -std=c++0x }
+
+struct A
+{
+ ~A() = delete; // { dg-error "declared here" }
+};
+
+struct B: A { }; // { dg-error "deleted" }
+
+extern B eb;
+int main()
+{
+ B* b1 = new B; // { dg-error "use of deleted function" "" { xfail *-*-* } }
+ B* b2 = new B(eb); // { dg-error "use of deleted function" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit12.C b/gcc/testsuite/g++.dg/cpp0x/implicit12.C
new file mode 100644
index 0000000000..da806e006a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit12.C
@@ -0,0 +1,54 @@
+// PR c++/50500
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/implicit13.C b/gcc/testsuite/g++.dg/cpp0x/implicit13.C
new file mode 100644
index 0000000000..3165863c63
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/implicit14.C b/gcc/testsuite/g++.dg/cpp0x/implicit14.C
new file mode 100644
index 0000000000..8a56244631
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/implicit4.C b/gcc/testsuite/g++.dg/cpp0x/implicit4.C
index f97eb7549f..47fd56a525 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit4.C
@@ -2,14 +2,13 @@
// constructor to be deleted.
// { dg-options "-std=c++0x" }
-struct A
+struct A // { dg-message "declares a move" }
{
- A(); // { dg-message "A::A|candidate expects" }
- A(A&&); // { dg-message "A::A|no known conversion" }
+ A();
+ A(A&&);
};
-struct B: A // { dg-error "implicit|no match" }
-// { dg-message "candidate" "candidate note" { target *-*-* } 11 }
+struct B: A // { dg-error "use of deleted" }
{
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit5.C b/gcc/testsuite/g++.dg/cpp0x/implicit5.C
index f25c08530d..d25294831e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit5.C
@@ -1,19 +1,19 @@
-// Test that the default B copy constructor calls the A member template
-// constructor.
+// Test that the default B copy constructor calls the deleted A
+// copy constructor.
// { dg-options -std=c++0x }
-struct A
+struct A // { dg-message "declares a move" }
{
A() = default;
A(A&&) = default;
template <class T>
- A(const T& t) { t.i; } // { dg-error "no member" }
+ A(const T& t) { t.i; }
};
-struct B: A { };
+struct B: A { }; // { dg-error "implicitly|use of deleted" }
int main()
{
B b;
- B b2(b);
+ B b2(b); // { dg-error "deleted" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit8.C b/gcc/testsuite/g++.dg/cpp0x/implicit8.C
index 2f3febae8b..c949af2105 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit8.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit8.C
@@ -1,9 +1,6 @@
// The hack for PR c++/44909 breaks this testcase. We need feedback
// from the C++ committee to know how to proceed.
// { dg-options -std=c++0x }
-// { dg-prune-output "implicitly deleted" }
-// { dg-prune-output "cannot bind" }
-// { dg-prune-output "initializing argument" }
struct A
{
@@ -28,7 +25,8 @@ struct 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?
-struct C: A, B { };
+// As of DR 1082, it doesn't suppress it.
+struct C: A, B { }; // { dg-error "use of deleted" }
C c;
-C c2(c); // { dg-bogus "deleted" "" { xfail *-*-* } }
+C c2(c); // { dg-error "deleted" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C b/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C
deleted file mode 100644
index 4bf6082295..0000000000
--- a/gcc/testsuite/g++.dg/cpp0x/initlist-49216.C
+++ /dev/null
@@ -1,6 +0,0 @@
-// PR c++/49216
-// { dg-options -std=c++0x }
-
-int main() {
- new int[1]{};
-}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-array3.C b/gcc/testsuite/g++.dg/cpp0x/initlist-array3.C
new file mode 100644
index 0000000000..1a94f4ed55
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/initlist-ctor1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C
new file mode 100644
index 0000000000..82031cbcc8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-ctor1.C
@@ -0,0 +1,13 @@
+// PR c++/52905
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/initlist-deduce.C b/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C
index e422132afc..373044f765 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-deduce.C
@@ -2,7 +2,7 @@
// 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 -std=c++0x }
+// { dg-options "-std=c++0x -fdeduce-init-list" }
// { dg-do run }
#include <initializer_list>
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-defarg1.C
new file mode 100644
index 0000000000..45eb2d5e1f
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/initlist-lifetime1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C
new file mode 100644
index 0000000000..e43ce5d62c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime1.C
@@ -0,0 +1,34 @@
+// Test that we properly extend the lifetime of the initializer_list
+// array even if the initializer_list is a subobject.
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+#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/testsuite/g++.dg/cpp0x/initlist-lifetime2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C
new file mode 100644
index 0000000000..16ae1ac6e0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-lifetime2.C
@@ -0,0 +1,64 @@
+// Test that we properly extend the lifetime of the initializer_list
+// array even if the initializer_list is a subobject.
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+#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/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C b/gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C
new file mode 100644
index 0000000000..38b17820db
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-postfix-open-square.C
@@ -0,0 +1,18 @@
+// PR c++/51738
+// { dg-options -std=c++0x }
+
+struct Index
+{
+ Index(unsigned, unsigned){ }
+};
+
+struct Matrix
+{
+ void operator[](Index){ }
+};
+
+int main()
+{
+ Matrix m;
+ m[{0,1}];
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C b/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C
new file mode 100644
index 0000000000..fb5cc6aa89
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-protected.C
@@ -0,0 +1,23 @@
+// PR c++/54325
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/initlist-pure.C b/gcc/testsuite/g++.dg/cpp0x/initlist-pure.C
new file mode 100644
index 0000000000..63c341c12c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-pure.C
@@ -0,0 +1,25 @@
+// PR c++/54325
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/initlist-value.C b/gcc/testsuite/g++.dg/cpp0x/initlist-value.C
new file mode 100644
index 0000000000..215bb90d4d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-value.C
@@ -0,0 +1,35 @@
+// Test for value-initialization via {}
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+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/testsuite/g++.dg/cpp0x/initlist-value2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-value2.C
new file mode 100644
index 0000000000..2b78241e95
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-value2.C
@@ -0,0 +1,20 @@
+// 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-options -std=c++0x }
+// { dg-do run }
+
+struct A
+{
+ int i;
+ A() = default;
+ A(int);
+};
+
+int main()
+{
+ A a{};
+ if (a.i != 0)
+ return 1;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist13.C b/gcc/testsuite/g++.dg/cpp0x/initlist13.C
index 9ed6c74419..bc5ee2c3ae 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist13.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist13.C
@@ -4,5 +4,5 @@
#include <complex>
-__complex__ int i ({0});
-std::complex<int> i2 ({0});
+__complex__ int i {0};
+std::complex<int> i2 {0};
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist17.C b/gcc/testsuite/g++.dg/cpp0x/initlist17.C
index 86371e8196..6ea08d1500 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist17.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist17.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
void f(int i);
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist36.C b/gcc/testsuite/g++.dg/cpp0x/initlist36.C
index 94624c977c..a703b45907 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist36.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist36.C
@@ -1,5 +1,5 @@
// PR c++/44358
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
#include <initializer_list>
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist49.C b/gcc/testsuite/g++.dg/cpp0x/initlist49.C
new file mode 100644
index 0000000000..752c4331af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist49.C
@@ -0,0 +1,18 @@
+// Test for non-trivial list-initialization with array new.
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+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/testsuite/g++.dg/cpp0x/initlist5.C b/gcc/testsuite/g++.dg/cpp0x/initlist5.C
index 32caac3825..51345c73fc 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist5.C
@@ -1,5 +1,5 @@
// Test for narrowing diagnostics
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
#include <initializer_list>
@@ -25,3 +25,11 @@ 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/testsuite/g++.dg/cpp0x/initlist50.C b/gcc/testsuite/g++.dg/cpp0x/initlist50.C
index ef4e72c7cf..5cb23e2db3 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist50.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist50.C
@@ -8,7 +8,7 @@ struct A2 {
template <class T> struct B {
T ar[1];
- B(T t):ar({t}) {}
+ B(T t):ar{t} {}
};
int main(){
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist52.C b/gcc/testsuite/g++.dg/cpp0x/initlist52.C
new file mode 100644
index 0000000000..17c0cfe3f1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist52.C
@@ -0,0 +1,7 @@
+// PR c++/45378
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+int main()
+{
+ int x { 22.2 }; // { dg-error "narrowing" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist53.C b/gcc/testsuite/g++.dg/cpp0x/initlist53.C
new file mode 100644
index 0000000000..22633f9095
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist53.C
@@ -0,0 +1,22 @@
+// PR c++/49216
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+#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/testsuite/g++.dg/cpp0x/initlist54.C b/gcc/testsuite/g++.dg/cpp0x/initlist54.C
new file mode 100644
index 0000000000..cdb296133f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist54.C
@@ -0,0 +1,13 @@
+// PR c++/49355
+// { dg-options -std=c++0x }
+
+#include <string>
+
+struct T {
+ std::string foobar;
+};
+
+int main()
+{
+ T* x = new T({""});
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist55.C b/gcc/testsuite/g++.dg/cpp0x/initlist55.C
new file mode 100644
index 0000000000..cb42e81ed6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist55.C
@@ -0,0 +1,5 @@
+// Test for -Wno-narrowing
+// { dg-options "-std=c++0x -pedantic-errors -Wno-narrowing" }
+
+int i;
+float d = { i };
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist56.C b/gcc/testsuite/g++.dg/cpp0x/initlist56.C
new file mode 100644
index 0000000000..862b41bb3c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist56.C
@@ -0,0 +1,37 @@
+// PR c++/47453
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+// 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/testsuite/g++.dg/cpp0x/initlist58.C b/gcc/testsuite/g++.dg/cpp0x/initlist58.C
new file mode 100644
index 0000000000..dfb9f0cd50
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist58.C
@@ -0,0 +1,17 @@
+// PR c++/50209
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/initlist59.C b/gcc/testsuite/g++.dg/cpp0x/initlist59.C
new file mode 100644
index 0000000000..2cc015d1fe
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist59.C
@@ -0,0 +1,18 @@
+// PR c++/49996
+// { dg-options -std=c++0x }
+
+struct A
+{
+ ~A()
+ { }
+};
+
+struct B
+{
+ const A& ref;
+};
+
+int main()
+{
+ B* p = new B{A()};
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist61.C b/gcc/testsuite/g++.dg/cpp0x/initlist61.C
new file mode 100644
index 0000000000..28eccc2637
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/initlist62.C b/gcc/testsuite/g++.dg/cpp0x/initlist62.C
new file mode 100644
index 0000000000..cabbcd1db4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist62.C
@@ -0,0 +1,10 @@
+// PR c++/51399
+// { dg-options "-std=c++0x" }
+
+#include <initializer_list>
+
+struct A
+{
+ std::initializer_list<int> x[1] = { 0 }; // { dg-error "could not convert" }
+ A() {}
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist63.C b/gcc/testsuite/g++.dg/cpp0x/initlist63.C
new file mode 100644
index 0000000000..a72c0ab992
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist63.C
@@ -0,0 +1,16 @@
+// Origin PR c++/51475
+// { dg-options -std=c++11 }
+
+#include <initializer_list>
+
+struct A
+{
+ A(int*);
+};
+
+struct B
+{
+ const std::initializer_list<A>& x;
+};
+
+B b = {{1}}; // { dg-error "invalid conversion|cannot convert" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist64.C b/gcc/testsuite/g++.dg/cpp0x/initlist64.C
new file mode 100644
index 0000000000..bcf1658074
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist64.C
@@ -0,0 +1,29 @@
+// PR c++/51553
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/initlist7.C b/gcc/testsuite/g++.dg/cpp0x/initlist7.C
index 7913ed7edb..55a0371860 100644
--- a/gcc/testsuite/g++.dg/cpp0x/initlist7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist7.C
@@ -1,5 +1,5 @@
// PR c++/37932
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
typedef enum { AA=1, BB=2 } my_enum;
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
new file mode 100644
index 0000000000..1cc7bb6583
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__.C
@@ -0,0 +1,9 @@
+// PR c++/44160
+// { dg-options -std=c++0x }
+// { dg-do link }
+
+int main()
+{
+ const char *p = []() { return __func__; }();
+ return p == 0;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C
new file mode 100644
index 0000000000..b5ba066375
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto1.C
@@ -0,0 +1,14 @@
+// PR c++/50437
+// { dg-options -std=c++0x }
+
+template <typename T>
+void f()
+{
+ auto g = [](T t){ return t == 0; };
+ g(T());
+}
+
+int main()
+{
+ f<int>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C
new file mode 100644
index 0000000000..82cc98423e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-neg.C
@@ -0,0 +1,15 @@
+// PR c++/50736
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+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/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C
new file mode 100644
index 0000000000..51e55a7aa4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-capture-redundancy.C
@@ -0,0 +1,12 @@
+// FDIS 5.1.2/8
+// { dg-options "-pedantic-errors -std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C
new file mode 100644
index 0000000000..d2457d6491
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const2.C
@@ -0,0 +1,15 @@
+// PR c++/52026
+// { dg-options "-std=c++11 -O" }
+// { dg-do run }
+
+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/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C
new file mode 100644
index 0000000000..bd90437236
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv6.C
@@ -0,0 +1,7 @@
+// PR c++/55015
+// { dg-do link }
+// { dg-options -std=c++11 }
+
+typedef void (*VoidFunc)();
+inline VoidFunc GetFunc() { return [](){}; }
+int main() { VoidFunc func = GetFunc(); }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv7.C
new file mode 100644
index 0000000000..89e4e4babf
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C
index bfe7acab69..f93e78a27c 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg.C
@@ -1,24 +1,22 @@
-// Testcase for an extension to allow return type deduction when the lambda
-// contains more than just a single return-statement.
+// Testcase for DR 975.
// { dg-options -std=c++0x }
bool b;
-template <class T>
-T f (T t)
-{
- return [=]
- {
- auto i = t+1;
- if (b)
- return i+1;
- else
- return i+2; // { dg-error "lambda return type" }
- }();
+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()
{
- if (f(1) != 3)
- return 1;
+ 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/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C
index a236e6d116..5c63409b68 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-ext-neg2.C
@@ -1,6 +1,5 @@
-// Test that in pedantic mode, we warn about the extension to allow return
-// type deduction when the lambda contains more than just a single
-// return-statement.
+// Test that this is accepted even when pedantic now that it's part
+// of the standard.
// { dg-options "-std=c++0x -pedantic" }
@@ -11,7 +10,7 @@ T f (T t)
[=] { return t+1; }; // OK
return [=] {
auto i = t+1;
- return i+1; // { dg-warning "only statement" }
+ return i+1;
}();
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C
index 4abdf59a69..c932c09db3 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce-neg.C
@@ -1,5 +1,4 @@
// { dg-options "-std=c++0x" }
-#include <cassert>
int main() {
int i = 0;
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C
index 718d49cd9b..eeb9814a05 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-deduce2.C
@@ -1,7 +1,11 @@
// PR c++/43875
// { dg-options "-std=c++0x" }
+void f();
+void f(int);
+
int main()
{
- auto x2 = []{ return { 1, 2 }; }; // { dg-message "return" }
+ auto x1 = []{ return f; }; // { dg-error "return|overloaded" }
+ auto x2 = []{ return { 1, 2 }; }; // { dg-error "return|list" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-err1.C
new file mode 100644
index 0000000000..ebf0cbd078
--- /dev/null
+++ b/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 closure" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
index dab53f1276..f94d64ec0e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C
@@ -15,5 +15,5 @@ void f()
int main()
{
- f<A>(); // { dg-message "instantiated" }
+ f<A>(); // { dg-message "required" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
new file mode 100644
index 0000000000..f161da8577
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
@@ -0,0 +1,12 @@
+// PR c++/50114
+// { dg-options "-std=c++0x -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/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
index 352137aad2..6468f18a0a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
@@ -9,8 +9,9 @@ decltype(F()) run(F f) // { dg-message "note" }
int main()
{
- auto l = []() { return 5; };
+ 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/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C
new file mode 100644
index 0000000000..305db812d8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice5.C
@@ -0,0 +1,12 @@
+// PR c++/51227
+// { dg-options "-std=c++0x" }
+
+template<int> int foo()
+{
+ [] (void i) { return 0; } (0); // { dg-error "incomplete|invalid|no match" }
+}
+
+void bar()
+{
+ foo<0>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C
new file mode 100644
index 0000000000..ddf352766e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice6.C
@@ -0,0 +1,4 @@
+// PR c++/51464
+// { dg-options "-std=c++0x" }
+
+template<int = sizeof([])> struct A {}; // { dg-error "lambda" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C
new file mode 100644
index 0000000000..946377e550
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C
@@ -0,0 +1,9 @@
+// PR c++/52487
+// { dg-options "-std=c++0x" }
+
+struct A; // { dg-error "forward declaration" }
+
+void foo(A& a)
+{
+ [=](){a;}; // { dg-error "invalid use of incomplete type" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C
new file mode 100644
index 0000000000..078ebaee18
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist1.C
@@ -0,0 +1,12 @@
+// PR c++/50863
+// { dg-options -std=gnu++0x }
+
+struct T {
+ template<typename F>
+ T(F) { }
+};
+
+int main()
+{
+ T t{ []{ } };
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C
new file mode 100644
index 0000000000..daaa33938a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-initlist2.C
@@ -0,0 +1,27 @@
+// PR c++/54947
+// { dg-options -std=gnu++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/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C
new file mode 100644
index 0000000000..06913a1c1a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle3.C
@@ -0,0 +1,15 @@
+// PR c++/51818
+// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "_ZN1AC1IN3foo3barMUlvE_EEET_" } }
+
+struct A
+{
+ template <class T> A(T) { }
+};
+
+struct foo
+{
+ A bar = []{};
+};
+
+foo f;
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C
new file mode 100644
index 0000000000..a5bd1a2f4e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested4.C
@@ -0,0 +1,9 @@
+// PR c++/47687
+// { dg-options -std=c++0x }
+
+template <class T> struct A { };
+
+auto inl = []{ return []{}; }();
+typedef decltype(inl) inlt;
+
+A<inlt> a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
new file mode 100644
index 0000000000..c3067713ca
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-switch.C
@@ -0,0 +1,26 @@
+// PR c++/49867
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C
new file mode 100644
index 0000000000..b3b749c2a5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-syntax1.C
@@ -0,0 +1,5 @@
+// PR c++/46124
+// { dg-options -std=c++0x }
+
+void foo() { [] () -> void (); } // { dg-error "returning a function" "returning" }
+// { dg-error "expected .\{" "expected" { target *-*-* } 4 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C
new file mode 100644
index 0000000000..fd6f1d3192
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template3.C
@@ -0,0 +1,33 @@
+// PR c++/49554
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template4.C
new file mode 100644
index 0000000000..a65727a1d4
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template5.C
new file mode 100644
index 0000000000..b91b89ff36
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template6.C
new file mode 100644
index 0000000000..5e8561946a
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template9.C
new file mode 100644
index 0000000000..c1d010ba12
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C
new file mode 100644
index 0000000000..acf4eaa7fc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C
@@ -0,0 +1,32 @@
+// PR c++/53137
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C
new file mode 100644
index 0000000000..6e25c331b4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C
@@ -0,0 +1,11 @@
+// PR c++/54122
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C
new file mode 100644
index 0000000000..d7c5d2c051
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C
new file mode 100644
index 0000000000..07ddd0863d
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/named.C b/gcc/testsuite/g++.dg/cpp0x/named.C
index ef1a2fb6f7..2dff24ca47 100644
--- a/gcc/testsuite/g++.dg/cpp0x/named.C
+++ b/gcc/testsuite/g++.dg/cpp0x/named.C
@@ -13,6 +13,7 @@ struct T
S && get() { return movel(s); }
operator S&&() { return movel(s); }
S && s;
+ S s2;
};
void named(S const &) {}
@@ -33,6 +34,7 @@ void f(S && p)
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/testsuite/g++.dg/cpp0x/noexcept11.C b/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
index eba2c40808..b7c64a6ef0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept11.C
@@ -1,4 +1,53 @@
-// PR c++/50309
+// PR c++/49107
// { dg-options -std=c++0x }
-void foo () noexcept () { } // { dg-error "expected" }
+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/testsuite/g++.dg/cpp0x/noexcept12.C b/gcc/testsuite/g++.dg/cpp0x/noexcept12.C
new file mode 100644
index 0000000000..1fd1b032f4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept12.C
@@ -0,0 +1,11 @@
+// Test that we handle merging with deferred noexcept.
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/noexcept13.C b/gcc/testsuite/g++.dg/cpp0x/noexcept13.C
new file mode 100644
index 0000000000..7d51c82b54
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept13.C
@@ -0,0 +1,78 @@
+// PR c++/49107
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/noexcept14.C b/gcc/testsuite/g++.dg/cpp0x/noexcept14.C
new file mode 100644
index 0000000000..eba2c40808
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept14.C
@@ -0,0 +1,4 @@
+// PR c++/50309
+// { dg-options -std=c++0x }
+
+void foo () noexcept () { } // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept15.C b/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
new file mode 100644
index 0000000000..5e8c40c277
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept15.C
@@ -0,0 +1,34 @@
+// PR c++/50391
+// { dg-options -std=c++0x }
+
+#include <type_traits>
+
+template<class Tp>
+ struct single
+ {
+ Tp elem; // { dg-error "incomplete type" }
+
+ constexpr single(const Tp& e)
+ : elem(e) { } // { dg-error "invalid field" }
+
+ single(single&& s) // { dg-error "not a member" }
+ noexcept(std::is_nothrow_move_constructible<Tp>::value)
+ : elem(s.elem) { } // { dg-error "invalid field|no member" }
+ };
+
+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/testsuite/g++.dg/cpp0x/noexcept16.C b/gcc/testsuite/g++.dg/cpp0x/noexcept16.C
new file mode 100644
index 0000000000..10e0be9588
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/noexcept18.C b/gcc/testsuite/g++.dg/cpp0x/noexcept18.C
new file mode 100644
index 0000000000..953fb0ec8b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept18.C
@@ -0,0 +1,11 @@
+// PR c++/54207
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+typedef bool B;
+constexpr B foo () { return true; }
+
+void
+bar () noexcept (foo ())
+{
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept19.C b/gcc/testsuite/g++.dg/cpp0x/noexcept19.C
new file mode 100644
index 0000000000..12ff86e0d2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept19.C
@@ -0,0 +1,29 @@
+// PR c++/55652
+// { dg-do compile }
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/noexcept20.C b/gcc/testsuite/g++.dg/cpp0x/noexcept20.C
new file mode 100644
index 0000000000..b86760292b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept20.C
@@ -0,0 +1,22 @@
+// PR c++/56071
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/not_special.C b/gcc/testsuite/g++.dg/cpp0x/not_special.C
index 6d73bd086c..2b510bb9a1 100644
--- a/gcc/testsuite/g++.dg/cpp0x/not_special.C
+++ b/gcc/testsuite/g++.dg/cpp0x/not_special.C
@@ -1,8 +1,8 @@
// 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 inhibit compiler generated
-// copy ctor or assignment.
+// That is, their presence should cause compiler declared
+// copy ctor or assignment to be deleted.
// { dg-options "-std=c++0x" }
@@ -24,12 +24,12 @@ struct base
base& operator=(const base&) {++assign; return *this;}
};
-struct derived
+struct derived // { dg-message "declares a move" }
: base
{
derived() {}
- derived(derived&&) {} // { dg-error "argument 1" }
- derived& operator=(derived&&) {return *this;} // { dg-error "argument 1" }
+ derived(derived&&) {}
+ derived& operator=(derived&&) {return *this;}
};
int test1()
@@ -37,11 +37,11 @@ int test1()
derived d;
derived d2(static_cast<derived&&>(d)); // should not call base::(const base&)
assert(copy == 0);
- derived d3(d); // { dg-error "lvalue" }
+ 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 "lvalue" }
+ d3 = d; // { dg-error "deleted" }
assert(assign == 1);
return 0;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C
new file mode 100644
index 0000000000..ddf9f04c58
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-const1.C
@@ -0,0 +1,10 @@
+// PR c++/50707
+// { dg-options -std=c++0x }
+
+int g;
+
+struct S {
+ int const v=g;
+};
+
+S s;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C
new file mode 100644
index 0000000000..b3d9b93575
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer1.C
@@ -0,0 +1,14 @@
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/nsdmi-defer2.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C
new file mode 100644
index 0000000000..1951262f9d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer2.C
@@ -0,0 +1,9 @@
+// { dg-options -std=c++0x }
+
+struct A
+{
+ int i = f();
+ static int f(int i = 42) { return i; }
+};
+
+A a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C
new file mode 100644
index 0000000000..2777fb5d8e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer3.C
@@ -0,0 +1,19 @@
+// Do NSDMI get deferred instantiation?
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-defer4.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C
new file mode 100644
index 0000000000..65b2e73807
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C
@@ -0,0 +1,18 @@
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-defer5.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C
new file mode 100644
index 0000000000..85abfbf861
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C
@@ -0,0 +1,20 @@
+// PR c++/51666 (DR 325)
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-eh1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C
new file mode 100644
index 0000000000..09c92d2f15
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C
@@ -0,0 +1,18 @@
+// Core issue 1351
+// { dg-do run { xfail *-*-* } }
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-list1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C
new file mode 100644
index 0000000000..526f29ae28
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C
@@ -0,0 +1,14 @@
+// PR c++/50563
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-list2.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C
new file mode 100644
index 0000000000..a6321ffb60
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-list2.C
@@ -0,0 +1,32 @@
+// PR c++/50930
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-template1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
new file mode 100644
index 0000000000..04f1e0391d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template1.C
@@ -0,0 +1,21 @@
+// { dg-do run }
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi-template2.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C
new file mode 100644
index 0000000000..27b0aa5f9d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-template2.C
@@ -0,0 +1,14 @@
+// PR c++/50614
+// { dg-options "-std=c++0x -fcompare-debug" }
+
+struct A
+{
+ int f ();
+};
+
+template <int> struct B : A
+{
+ int i = this->f ();
+};
+
+B<0> b;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C
new file mode 100644
index 0000000000..4aa8d482da
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-virtual1.C
@@ -0,0 +1,26 @@
+// PR c++/51611
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+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/testsuite/g++.dg/cpp0x/nsdmi1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi1.C
new file mode 100644
index 0000000000..159c16de85
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi1.C
@@ -0,0 +1,53 @@
+// { dg-do run }
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi2.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi2.C
new file mode 100644
index 0000000000..9636bed882
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi2.C
@@ -0,0 +1,21 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi3.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi3.C
new file mode 100644
index 0000000000..73b2bc2e1a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi3.C
@@ -0,0 +1,18 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi4.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi4.C
new file mode 100644
index 0000000000..db365cb55e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi4.C
@@ -0,0 +1,24 @@
+// { dg-do run }
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi5.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
new file mode 100644
index 0000000000..62803b0819
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
@@ -0,0 +1,20 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nsdmi6.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi6.C
new file mode 100644
index 0000000000..bb455e778e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi6.C
@@ -0,0 +1,8 @@
+// Origin PR c++/51477
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/nsdmi7.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi7.C
new file mode 100644
index 0000000000..ea1957775a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi7.C
@@ -0,0 +1,17 @@
+// PR c++/53594
+// { dg-do compile }
+// { dg-options "-std=c++11 -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/testsuite/g++.dg/cpp0x/nullptr15.C b/gcc/testsuite/g++.dg/cpp0x/nullptr15.C
index e02fd5592e..af661ecc3a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nullptr15.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr15.C
@@ -17,10 +17,10 @@ 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" "candidate note" { target *-*-* } 19 }
+ // { 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" "candidate note" { target *-*-* } 23 }
+ // { dg-message "(candidate|mismatched types)" "candidate note" { target *-*-* } 23 }
type_equal<float*>(g((float*)mynull));
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr19.C b/gcc/testsuite/g++.dg/cpp0x/nullptr19.C
index cf30f1c239..ecc36139a4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nullptr19.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr19.C
@@ -5,8 +5,8 @@
typedef decltype(nullptr) nullptr_t;
-char* k( char* ); /* { dg-message "note" } { dg-message "note" } */
-nullptr_t k( nullptr_t ); /* { dg-message "note" } { dg-message "note" } */
+char* k( char* ); /* { dg-message "note" } */
+nullptr_t k( nullptr_t ); /* { dg-message "note" } */
void test_k()
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr21.C b/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
index c30cb3c8b6..8362bd2965 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr21.C
@@ -3,42 +3,53 @@
// Test throw and catch
-#include <cstdio>
+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*) {
- printf("Test 1 Fail");
+ foo (0, 1);
} catch (bool) {
- printf("Test 1 Fail");
+ foo (0, 2);
} catch (int) {
- printf("Test 1 Fail");
+ foo (0, 3);
} catch (long int) {
- printf("Test 1 Fail");
+ foo (0, 4);
} catch (nullptr_t) {
- printf("Test 1 OK");
+ foo (0, 5);
} catch (...) {
- printf("Test 1 Fail");
- } // { dg-output "Test 1 OK" }
+ foo (0, 6);
+ }
nullptr_t mynull = 0;
try {
throw mynull;
} catch (void*) {
- printf("Test 2 Fail");
+ foo (1, 1);
} catch (bool) {
- printf("Test 2 Fail");
+ foo (1, 2);
} catch (int) {
- printf("Test 2 Fail");
+ foo (1, 3);
} catch (long int) {
- printf("Test 2 Fail");
+ foo (1, 4);
} catch (nullptr_t) {
- printf("Test 2 OK");
+ foo (1, 5);
} catch (...) {
- printf("Test 2 Fail");
- } // { dg-output "Test 2 OK" }
+ foo (1, 6);
+ }
+
+ if (result[0] != 5 || result[1] != 5)
+ abort ();
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr23.C b/gcc/testsuite/g++.dg/cpp0x/nullptr23.C
new file mode 100644
index 0000000000..a078269de2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr23.C
@@ -0,0 +1,24 @@
+// PR c++/50361
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/nullptr24.C b/gcc/testsuite/g++.dg/cpp0x/nullptr24.C
new file mode 100644
index 0000000000..f391779662
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr24.C
@@ -0,0 +1,5 @@
+// PR c++/50371
+// { dg-options -std=c++0x }
+
+template<decltype(nullptr)>
+struct nt;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr25.C b/gcc/testsuite/g++.dg/cpp0x/nullptr25.C
new file mode 100644
index 0000000000..b8a7f45c67
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr25.C
@@ -0,0 +1,6 @@
+// { dg-options -std=c++0x }
+
+template<decltype(nullptr)>
+struct nt{};
+
+nt<nullptr> x;
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr26.C b/gcc/testsuite/g++.dg/cpp0x/nullptr26.C
new file mode 100644
index 0000000000..b7421b8d04
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr26.C
@@ -0,0 +1,13 @@
+// PR c++/51530
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/nullptr28.C b/gcc/testsuite/g++.dg/cpp0x/nullptr28.C
new file mode 100644
index 0000000000..05fbe57b19
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/nullptr29.C b/gcc/testsuite/g++.dg/cpp0x/nullptr29.C
new file mode 100644
index 0000000000..a8e35a9b67
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr29.C
@@ -0,0 +1,4 @@
+// PR c++/53882
+// { dg-options "-std=gnu++11 -O" }
+
+void f(decltype(nullptr) &__restrict np) { }
diff --git a/gcc/testsuite/g++.dg/cpp0x/overload2.C b/gcc/testsuite/g++.dg/cpp0x/overload2.C
new file mode 100644
index 0000000000..ff8ad22bea
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/overload2.C
@@ -0,0 +1,24 @@
+// Core 1321
+// { dg-options -std=c++0x }
+// 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();
+int g2(int);
+template <class T> decltype(g2(T())) f2() // { dg-error "g2. was not declared" }
+{ return g2(T()); }
+int i2 = f2<int>(); // { dg-error "no match" }
+
+int g3();
+template <class T> decltype(g3(T())) f3();
+int g3(int);
+template <class T> decltype(g3(T())) f3() // { dg-error "too many arguments" }
+{ return g3(T()); }
+int i3 = f3<int>(); // { dg-error "no match" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/override1.C b/gcc/testsuite/g++.dg/cpp0x/override1.C
new file mode 100644
index 0000000000..ba580b5c09
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/override1.C
@@ -0,0 +1,61 @@
+// { dg-do compile }
+// { dg-options "--std=c++0x" }
+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/testsuite/g++.dg/cpp0x/override2.C b/gcc/testsuite/g++.dg/cpp0x/override2.C
new file mode 100644
index 0000000000..0d8871d6ae
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/override2.C
@@ -0,0 +1,54 @@
+// { dg-do compile }
+// { dg-options "--std=c++0x" }
+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 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-error "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/testsuite/g++.dg/cpp0x/override3.C b/gcc/testsuite/g++.dg/cpp0x/override3.C
new file mode 100644
index 0000000000..2d22cbf2aa
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/pr31431-2.C b/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
index 15efbc5d35..076493938a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
@@ -4,5 +4,5 @@ template<typename, typename..., typename> void foo(); // { dg-message "note" }
void bar()
{
foo<int>(); // { dg-error "no matching function" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 6 }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31431.C b/gcc/testsuite/g++.dg/cpp0x/pr31431.C
index 36f341f3d0..afd3237157 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr31431.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr31431.C
@@ -4,5 +4,5 @@ template<typename..., typename> void foo(); // { dg-message "note" }
void bar()
{
foo<int>(); // { dg-error "no matching function" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 6 }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31434.C b/gcc/testsuite/g++.dg/cpp0x/pr31434.C
index 97ad079ab0..54786167c3 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr31434.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr31434.C
@@ -8,5 +8,5 @@ template<typename... T> int foo(const T&) // { dg-error "not expanded with|T" }
void bar()
{
foo(0); // { dg-error "no matching" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 10 }
+ // { dg-message "(candidate|cannot convert)" "candidate note" { target *-*-* } 10 }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr45908.C b/gcc/testsuite/g++.dg/cpp0x/pr45908.C
index 3a8508890e..45399b5395 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr45908.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr45908.C
@@ -14,5 +14,5 @@ struct vector {
class block {
vector v;
auto end() const -> decltype(v.begin())
- { return v.begin(); } // { dg-error "could not convert" }
+ { return v.begin(); }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr47416.C b/gcc/testsuite/g++.dg/cpp0x/pr47416.C
index a11368a50f..55426c1f81 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr47416.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr47416.C
@@ -210,7 +210,7 @@ namespace boost
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 "instantiated" }
+ allocator_type a = allocator_type ()):table_ (n, hf, eql, a) // { dg-message "required" }
{
}
};
@@ -220,6 +220,6 @@ void
foo (const int &a)
{
typedef boost::unordered_map < std::string, int >Name2Port;
- Name2Port b; // { dg-message "instantiated" }
+ Name2Port b; // { dg-message "required" }
std::make_pair (a, b);
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr50901.C b/gcc/testsuite/g++.dg/cpp0x/pr50901.C
new file mode 100644
index 0000000000..439c15cc1c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr50901.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/pr51150.C b/gcc/testsuite/g++.dg/cpp0x/pr51150.C
new file mode 100644
index 0000000000..37eb166b43
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51150.C
@@ -0,0 +1,20 @@
+// PR c++/51150
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/pr51216.C b/gcc/testsuite/g++.dg/cpp0x/pr51216.C
new file mode 100644
index 0000000000..4bdd071475
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51216.C
@@ -0,0 +1,10 @@
+// PR c++/51216
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/pr51225.C b/gcc/testsuite/g++.dg/cpp0x/pr51225.C
new file mode 100644
index 0000000000..6fcf8611f9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51225.C
@@ -0,0 +1,14 @@
+// PR c++/51225
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/pr51313.C b/gcc/testsuite/g++.dg/cpp0x/pr51313.C
new file mode 100644
index 0000000000..ff078e02d6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51313.C
@@ -0,0 +1,18 @@
+// PR c++/51313
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/pr51420.C b/gcc/testsuite/g++.dg/cpp0x/pr51420.C
new file mode 100644
index 0000000000..aec8cb1fcb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51420.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/pr51463.C b/gcc/testsuite/g++.dg/cpp0x/pr51463.C
new file mode 100644
index 0000000000..1e8be3b521
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51463.C
@@ -0,0 +1,8 @@
+// PR c++/51463
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+struct A
+{
+ static virtual int i = 0; // { dg-error "both virtual and static|declared as" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr51547.C b/gcc/testsuite/g++.dg/cpp0x/pr51547.C
new file mode 100644
index 0000000000..80215f6a34
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51547.C
@@ -0,0 +1,50 @@
+// PR c++/51547
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/pr51619.C b/gcc/testsuite/g++.dg/cpp0x/pr51619.C
new file mode 100644
index 0000000000..dd51679158
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51619.C
@@ -0,0 +1,7 @@
+// PR c++/51619
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+struct A { virtual ~A(); };
+struct B { A a[1][1]; } b;
+struct C { A a[3][3]; } c;
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr52841.C b/gcc/testsuite/g++.dg/cpp0x/pr52841.C
new file mode 100644
index 0000000000..f6467f8f72
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C b/gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
new file mode 100644
index 0000000000..b6c81d5f46
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C
@@ -0,0 +1,9 @@
+// Origin PR c++/51476
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/range-for11.C b/gcc/testsuite/g++.dg/cpp0x/range-for11.C
new file mode 100644
index 0000000000..d02519a251
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for11.C
@@ -0,0 +1,40 @@
+// Test for range-based for loop
+// Test the loop with a custom iterator
+// with begin/end as member functions
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/range-for12.C b/gcc/testsuite/g++.dg/cpp0x/range-for12.C
new file mode 100644
index 0000000000..9b405dc620
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for12.C
@@ -0,0 +1,116 @@
+// Test for range-based for loop with templates
+// and begin/end as member functions
+
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+/* 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/testsuite/g++.dg/cpp0x/range-for13.C b/gcc/testsuite/g++.dg/cpp0x/range-for13.C
new file mode 100644
index 0000000000..7ebf0c563e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for13.C
@@ -0,0 +1,103 @@
+// Test for errors in range-based for loops
+// with member begin/end
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//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/testsuite/g++.dg/cpp0x/range-for14.C b/gcc/testsuite/g++.dg/cpp0x/range-for14.C
new file mode 100644
index 0000000000..26ae477d70
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for14.C
@@ -0,0 +1,95 @@
+// Test for other range-based for loops with
+// begin/end member functions
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+//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-error "" }
+};
+
+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/testsuite/g++.dg/cpp0x/range-for15.C b/gcc/testsuite/g++.dg/cpp0x/range-for15.C
new file mode 100644
index 0000000000..38f330771e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for15.C
@@ -0,0 +1,59 @@
+// Test for range-based for loop with templates
+// and begin/end as member (non-)virtual functions
+
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/range-for16.C b/gcc/testsuite/g++.dg/cpp0x/range-for16.C
new file mode 100644
index 0000000000..86cc2a828b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for16.C
@@ -0,0 +1,21 @@
+// Test for range-based for loop with arrays of
+// incomplete type or unknown size
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/range-for17.C b/gcc/testsuite/g++.dg/cpp0x/range-for17.C
new file mode 100644
index 0000000000..eb888d9ab6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for17.C
@@ -0,0 +1,17 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/range-for18.C b/gcc/testsuite/g++.dg/cpp0x/range-for18.C
new file mode 100644
index 0000000000..386d73d181
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for18.C
@@ -0,0 +1,17 @@
+// PR c++/48994
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/range-for19.C b/gcc/testsuite/g++.dg/cpp0x/range-for19.C
new file mode 100644
index 0000000000..4306fbda6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for19.C
@@ -0,0 +1,11 @@
+// PR c++/49838
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+int main()
+{
+ auto a; // { dg-error "no initializer" }
+ for(auto i: a) // { dg-error "deduce" }
+ ;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for2.C b/gcc/testsuite/g++.dg/cpp0x/range-for2.C
index bfab37673a..17eb41dba7 100644
--- a/gcc/testsuite/g++.dg/cpp0x/range-for2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for2.C
@@ -8,7 +8,7 @@
struct iterator
{
int x;
- iterator(int v) :x(v) {}
+ explicit iterator(int v) :x(v) {}
iterator &operator ++() { ++x; return *this; }
int operator *() { return x; }
bool operator != (const iterator &o) { return x != o.x; }
@@ -36,6 +36,6 @@ namespace foo
int main()
{
foo::container c(1,4);
- for (iterator it : c)
+ for (int it : c)
;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for20.C b/gcc/testsuite/g++.dg/cpp0x/range-for20.C
new file mode 100644
index 0000000000..890eb0aeaf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for20.C
@@ -0,0 +1,36 @@
+// PR c++/49834
+// PR c++/50020
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/range-for21.C b/gcc/testsuite/g++.dg/cpp0x/range-for21.C
new file mode 100644
index 0000000000..07bb95fbf2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for21.C
@@ -0,0 +1,8 @@
+// PR c++/49983
+// { dg-options -std=c++0x }
+
+template <class T>
+void f(T t)
+{
+ for (auto v : t);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for22.C b/gcc/testsuite/g++.dg/cpp0x/range-for22.C
new file mode 100644
index 0000000000..5fef5e6acc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for22.C
@@ -0,0 +1,5 @@
+// { dg-options -std=c++0x }
+
+template<int I> void f() {
+ for (auto i: {I} );
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for24.C b/gcc/testsuite/g++.dg/cpp0x/range-for24.C
new file mode 100644
index 0000000000..b4a5b185bd
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/range-for3.C b/gcc/testsuite/g++.dg/cpp0x/range-for3.C
index 947f01ced7..85115a38f5 100644
--- a/gcc/testsuite/g++.dg/cpp0x/range-for3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for3.C
@@ -8,7 +8,7 @@
struct iterator
{
int x;
- iterator(int v) :x(v) {}
+ explicit iterator(int v) :x(v) {}
iterator &operator ++() { ++x; return *this; }
int operator *() { return x; }
bool operator != (const iterator &o) { return x != o.x; }
@@ -36,7 +36,7 @@ namespace std
int main()
{
container c(1,4);
- for (iterator it : c)
+ for (int it : c)
{
}
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for5.C b/gcc/testsuite/g++.dg/cpp0x/range-for5.C
index 9c97ad5faf..fd6f7618f9 100644
--- a/gcc/testsuite/g++.dg/cpp0x/range-for5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for5.C
@@ -47,8 +47,8 @@ void test1()
//Check the correct scopes
int i;
- for (int i : a)
+ for (int i : a) // { dg-error "previously declared" }
{
- int i;
+ int i; // { dg-error "redeclaration" }
}
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for9.C b/gcc/testsuite/g++.dg/cpp0x/range-for9.C
index 96e9cb61fd..c51cbf9946 100644
--- a/gcc/testsuite/g++.dg/cpp0x/range-for9.C
+++ b/gcc/testsuite/g++.dg/cpp0x/range-for9.C
@@ -6,6 +6,6 @@
void test()
{
int a[] = {0,1,2};
- for (int x : a) // { dg-error "range-based-for" }
+ for (int x : a) // { dg-error "range-based 'for'" }
;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/49290.C b/gcc/testsuite/g++.dg/cpp0x/regress/49290.C
deleted file mode 100644
index 71e46c5796..0000000000
--- a/gcc/testsuite/g++.dg/cpp0x/regress/49290.C
+++ /dev/null
@@ -1,12 +0,0 @@
-typedef unsigned T;
-struct S
-{
- T foo (void);
- static unsigned s1[16];
-};
-T
-S::foo ()
-{
- T u = *(T *) (s1 + 10);
- return u;
-}
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C b/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C
new file mode 100644
index 0000000000..c35d6011f3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/ctor1.C
@@ -0,0 +1,21 @@
+// PR c++/49569
+// { dg-options -std=c++0x }
+
+struct A
+{
+ virtual void f() = 0;
+};
+
+struct B: A
+{
+ int i;
+ virtual void f() { }
+};
+
+struct C
+{
+ B b;
+ C(): b() { }
+ C(const B& b): b(b) { }
+};
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C
index 2094d3e3eb..cdf9940847 100644
--- a/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C
@@ -5,5 +5,7 @@ template < bool > void
foo ()
{
const bool b =; // { dg-error "" }
- foo < b > (); // { dg-error "constant expression" }
+ foo < b > (); // { dg-error "constant expression" "const expr" }
};
+
+// { dg-error "no match" "no match" { target *-*-* } 8 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress4.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress4.C
new file mode 100644
index 0000000000..b56263ae5a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress4.C
@@ -0,0 +1,62 @@
+// PR c++/49663
+// { dg-options -std=c++0x }
+
+struct Nosm
+{
+ int m_R;
+};
+
+namespace dx {
+
+ struct onc
+ {
+ typedef void(*Cb)();
+
+ onc(Cb cb);
+ };
+
+ struct grac
+ {
+ template<class Derived> static void once();
+ };
+
+ template<class Derived>
+ struct tonc : onc
+ {
+ tonc() : onc(&grac::once<Derived>) {}
+
+ static Derived& get();
+ };
+
+ template<class Derived> void grac::once()
+ {
+ tonc<Derived>::get().h();
+ }
+}
+
+namespace
+{
+ template<typename T, int = sizeof(&T::m_R)>
+ struct has_R { };
+
+ template<typename T>
+ inline void
+ setR(T* m, has_R<T>* = 0)
+ { }
+
+ inline void setR(...) { }
+}
+
+template<typename M>
+ struct Qmi
+ : dx::tonc<Qmi<M> >
+ {
+ void h()
+ {
+ setR(&msg);
+ }
+
+ M msg;
+ };
+
+Qmi<Nosm> x;
diff --git a/gcc/testsuite/g++.dg/cpp0x/regress/regress6.C b/gcc/testsuite/g++.dg/cpp0x/regress/regress6.C
new file mode 100644
index 0000000000..6de64c0b34
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/regress6.C
@@ -0,0 +1,11 @@
+// PR c++/49691
+// { dg-options -std=c++0x }
+
+struct A { int x; };
+A* f();
+struct B {
+ void g()
+ {
+ int(f()->x);
+ }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C
new file mode 100644
index 0000000000..ed866f9e1f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+struct A
+{
+ int i : 1;
+};
+
+int main()
+{
+ A a;
+ static_cast<int&&>(a.i);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C
new file mode 100644
index 0000000000..e054151b05
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-bitfield2.C
@@ -0,0 +1,17 @@
+// PR c++/51868
+// { dg-options -std=c++0x }
+
+struct A {
+ A() {}
+ A(const A&) {}
+ A(A&&) {}
+};
+
+struct B {
+ A a;
+ int f : 1;
+};
+
+B func() {
+ return B();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C b/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
new file mode 100644
index 0000000000..6c70324aa8
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/rv-cast4.C b/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
new file mode 100644
index 0000000000..13f369d610
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/rv-conv1.C b/gcc/testsuite/g++.dg/cpp0x/rv-conv1.C
new file mode 100644
index 0000000000..38529913f8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-conv1.C
@@ -0,0 +1,9 @@
+// PR c++/49267
+// { dg-options -std=c++0x }
+
+struct X {
+ operator int&();
+ operator int&&();
+};
+
+int&&x = X();
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C b/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
new file mode 100644
index 0000000000..65aac8da2a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-dotstar.C
@@ -0,0 +1,13 @@
+// PR c++/49389
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/rv-func.C b/gcc/testsuite/g++.dg/cpp0x/rv-func.C
new file mode 100644
index 0000000000..db14296112
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-func.C
@@ -0,0 +1,22 @@
+// PR c++/48457, Core 1238
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/rv-func2.C b/gcc/testsuite/g++.dg/cpp0x/rv-func2.C
new file mode 100644
index 0000000000..b792342dad
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-func2.C
@@ -0,0 +1,10 @@
+// PR c++/49458
+// { dg-options -std=c++0x }
+
+typedef void ftype();
+
+struct A {
+ operator ftype&(void);
+};
+
+ftype &&frvref = A();
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-func3.C b/gcc/testsuite/g++.dg/cpp0x/rv-func3.C
new file mode 100644
index 0000000000..8504682d79
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-func3.C
@@ -0,0 +1,10 @@
+// DR 1328
+// { dg-options -std=c++0x }
+
+template <class T> struct A {
+ operator T&(); // #1
+ operator T&&(); // #2
+};
+typedef int Fn();
+A<Fn> a;
+Fn&& f = a;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-return.C b/gcc/testsuite/g++.dg/cpp0x/rv-return.C
index e52101feae..3ab659833e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv-return.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-return.C
@@ -7,12 +7,12 @@ 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 const> s1;
+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 const> s3;
+same_type<decltype(g<int>()), int> s3;
same_type<decltype(0,g<int>()), int> s4;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-template1.C b/gcc/testsuite/g++.dg/cpp0x/rv-template1.C
new file mode 100644
index 0000000000..11f53bd1c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-template1.C
@@ -0,0 +1,11 @@
+// PR c++/44870
+// { dg-options -std=c++0x }
+
+void foo(int&& data);
+
+template <typename T>
+void bar(T t)
+{ foo(int()); }
+
+void baz()
+{ bar(0); }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
index 2765b5f3c3..cbce7c4ddd 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
@@ -5,22 +5,22 @@
int move_construct = 0;
int move_assign = 0;
-struct base2
+struct base2 // { dg-message "declares a move" }
{
base2() {}
- base2(base2&&) {++move_construct;} // { dg-error "argument 1" }
- base2& operator=(base2&&) {++move_assign; return *this;} // { dg-error "argument 1" }
+ base2(base2&&) {++move_construct;}
+ base2& operator=(base2&&) {++move_assign; return *this;}
};
int test2()
{
base2 b;
- base2 b2(b); // { dg-error "lvalue" }
+ 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 "lvalue" }
+ b = b2; // { dg-error "deleted" }
assert(move_assign == 0);
b = static_cast<base2&&>(b2);
assert(move_assign == 1);
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv1n.C b/gcc/testsuite/g++.dg/cpp0x/rv1n.C
index 5224d3eb70..68305ebc9b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv1n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv1n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -35,9 +35,9 @@ one sink_1_1( A&); // { dg-error "" }
int test1_1()
{
A a;
- const A ca = a; // { dg-error "cannot bind" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "cannot bind" }
+ 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" }
@@ -53,9 +53,9 @@ two sink_1_2(const A&); // { dg-error "" }
int test1_2()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -68,9 +68,9 @@ three sink_1_3(volatile A&); // { dg-error "" }
int test1_3()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -85,9 +85,9 @@ four sink_1_4(const volatile A&); // { dg-error "" }
int test1_4()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -100,9 +100,9 @@ five sink_1_5( A&&); // { dg-error "" }
int test1_5()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -118,9 +118,9 @@ six sink_1_6(const A&&); // { dg-error "" }
int test1_6()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -135,9 +135,9 @@ seven sink_1_7(volatile A&&); // { dg-error "" }
int test1_7()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -152,9 +152,9 @@ eight sink_1_8(const volatile A&&); // { dg-error "" }
int test1_8()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv2n.C b/gcc/testsuite/g++.dg/cpp0x/rv2n.C
index 2b3a9c06ae..a9d37415e0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv2n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv2n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -36,9 +36,9 @@ two sink_2_12(const A&); // { dg-message "note|argument" }
int test2_12()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -56,9 +56,9 @@ three sink_2_13(volatile A&); // { dg-message "note|argument" }
int test2_13()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -80,9 +80,9 @@ four sink_2_14(const volatile A&); // { dg-message "note|argument" }
int test2_14()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -100,9 +100,9 @@ five sink_2_15( A&&); // { dg-message "note|argument" }
int test2_15()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -124,9 +124,9 @@ six sink_2_16(const A&&); // { dg-message "note|argument" }
int test2_16()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -145,9 +145,9 @@ seven sink_2_17(volatile A&&); // { dg-message "note|argument" }
int test2_17()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -166,9 +166,9 @@ eight sink_2_18(const volatile A&&); // { dg-error "argument" }
int test2_18()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -180,9 +180,9 @@ three sink_2_23(volatile A&); // { dg-message "note|argument" }
int test2_23()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -200,9 +200,9 @@ four sink_2_24(const volatile A&); // { dg-message "note|argument" }
int test2_24()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -216,9 +216,9 @@ four sink_2_34(const volatile A&); // { dg-message "note|argument" }
int test2_34()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -236,9 +236,9 @@ five sink_2_25( A&&); // { dg-message "note|argument" }
int test2_25()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -256,9 +256,9 @@ six sink_2_26(const A&&); // { dg-message "note|argument" }
int test2_26()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -276,9 +276,9 @@ seven sink_2_27(volatile A&&); // { dg-message "note|argument" }
int test2_27()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -293,9 +293,9 @@ eight sink_2_28(const volatile A&&); // { dg-error "argument" }
int test2_28()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_2_28(va); // { dg-error "lvalue" }
sink_2_28(cva); // { dg-error "lvalue" }
}
@@ -306,9 +306,9 @@ five sink_2_35( A&&); // { dg-message "note|argument" }
int test2_35()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -328,9 +328,9 @@ six sink_2_36(const A&&); // { dg-message "note|argument" }
int test2_36()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -347,9 +347,9 @@ seven sink_2_37(volatile A&&); // { dg-message "note|argument" }
int test2_37()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -367,9 +367,9 @@ eight sink_2_38(const volatile A&&); // { dg-error "argument" }
int test2_38()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_2_38(ca); // { dg-error "lvalue" }
sink_2_38(cva); // { dg-error "lvalue" }
}
@@ -380,9 +380,9 @@ five sink_2_45( A&&); // { dg-message "note|argument" }
int test2_45()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -398,9 +398,9 @@ six sink_2_46(const A&&); // { dg-message "note|argument" }
int test2_46()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -414,9 +414,9 @@ seven sink_2_47(volatile A&&); // { dg-message "note|argument" }
int test2_47()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -430,9 +430,9 @@ six sink_2_56(const A&&); // { dg-message "note|argument" }
int test2_56()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -452,9 +452,9 @@ seven sink_2_57(volatile A&&); // { dg-message "note|argument" }
int test2_57()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -474,9 +474,9 @@ eight sink_2_58(const volatile A&&); // { dg-error "argument" }
int test2_58()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -489,9 +489,9 @@ seven sink_2_67(volatile A&&); // { dg-message "note|argument" }
int test2_67()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -511,9 +511,9 @@ eight sink_2_68(const volatile A&&); // { dg-error "argument" }
int test2_68()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -526,9 +526,9 @@ eight sink_2_78(const volatile A&&); // { dg-error "argument" }
int test2_78()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv3n.C b/gcc/testsuite/g++.dg/cpp0x/rv3n.C
index 637716f9b4..14b810ae68 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv3n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv3n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -37,9 +37,9 @@ three sink_3_123(volatile A&); // { dg-message "three sink_3_123|no known
int test3_123()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -60,9 +60,9 @@ four sink_3_124(const volatile A&); // { dg-message "four sink_3_124|no known
int test3_124()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -73,9 +73,9 @@ int test3_124()
int test3_125()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -94,9 +94,9 @@ six sink_3_126(const A&&); // { dg-message "six sink_3_126|no known
int test3_126()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -115,9 +115,9 @@ seven sink_3_127(volatile A&&); // { dg-message "seven sink_3_127|no know
int test3_127()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -133,9 +133,9 @@ eight sink_3_128(const volatile A&&); // { dg-message "" }
int test3_128()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_128(va); // { dg-error "lvalue" }
sink_3_128(cva); // { dg-error "lvalue" }
@@ -148,9 +148,9 @@ four sink_3_134(const volatile A&); // { dg-message "four sink_3_134|no known
int test3_134()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -169,9 +169,9 @@ five sink_3_135( A&&); // { dg-message "five sink_3_135|no known
int test3_135()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -192,9 +192,9 @@ six sink_3_136(const A&&); // { dg-message "" }
int test3_136()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -212,9 +212,9 @@ seven sink_3_137(volatile A&&); // { dg-message "note" }
int test3_137()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -233,9 +233,9 @@ eight sink_3_138(const volatile A&&); // { dg-message "" }
int test3_138()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_138(ca); // { dg-error "lvalue" }
sink_3_138(cva); // { dg-error "lvalue" }
return 0;
@@ -248,9 +248,9 @@ five sink_3_145( A&&); // { dg-message "note" }
int test3_145()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -267,9 +267,9 @@ six sink_3_146(const A&&); // { dg-message "note" }
int test3_146()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -284,9 +284,9 @@ seven sink_3_147(volatile A&&); // { dg-message "note" }
int test3_147()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -301,9 +301,9 @@ six sink_3_156(const A&&); // { dg-message "" }
int test3_156()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -323,9 +323,9 @@ seven sink_3_157(volatile A&&); // { dg-message "" }
int test3_157()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -345,9 +345,9 @@ eight sink_3_158(const volatile A&&); // { dg-message "" }
int test3_158()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -361,9 +361,9 @@ seven sink_3_167(volatile A&&); // { dg-message "" }
int test3_167()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -382,9 +382,9 @@ eight sink_3_168(const volatile A&&); // { dg-message "" }
int test3_168()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -398,9 +398,9 @@ eight sink_3_178(const volatile A&&); // { dg-message "" }
int test3_178()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -414,9 +414,9 @@ four sink_3_234(const volatile A&); // { dg-message "note" }
int test3_234()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -433,9 +433,9 @@ five sink_3_235( A&&); // { dg-message "note" }
int test3_235()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -454,9 +454,9 @@ six sink_3_236(const A&&); // { dg-message "note" }
int test3_236()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -475,9 +475,9 @@ seven sink_3_237(volatile A&&); // { dg-message "note" }
int test3_237()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -494,9 +494,9 @@ eight sink_3_238(const volatile A&&); // { dg-message "eight sink_3_238|no know
int test3_238()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -510,9 +510,9 @@ five sink_3_245( A&&); // { dg-message "five sink_3_245|no known
int test3_245()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -527,9 +527,9 @@ six sink_3_246(const A&&); // { dg-message "six sink_3_246|no known
int test3_246()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -544,9 +544,9 @@ seven sink_3_247(volatile A&&); // { dg-message "seven sink_3_247|no know
int test3_247()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -559,9 +559,9 @@ six sink_3_256(const A&&); // { dg-message "six sink_3_256|no known
int test3_256()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -580,9 +580,9 @@ seven sink_3_257(volatile A&&); // { dg-message "seven sink_3_257|no know
int test3_257()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -598,9 +598,9 @@ eight sink_3_258(const volatile A&&); // { dg-message "" }
int test3_258()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_258(va); // { dg-error "lvalue" }
sink_3_258(cva); // { dg-error "lvalue" }
return 0;
@@ -613,9 +613,9 @@ seven sink_3_267(volatile A&&); // { dg-message "seven sink_3_267|no know
int test3_267()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -633,9 +633,9 @@ eight sink_3_268(const volatile A&&); // { dg-message "" }
int test3_268()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_268(va); // { dg-error "lvalue" }
sink_3_268(cva); // { dg-error "lvalue" }
return 0;
@@ -648,9 +648,9 @@ eight sink_3_278(const volatile A&&); // { dg-message "" }
int test3_278()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_278(va); // { dg-error "lvalue" }
sink_3_278(cva); // { dg-error "lvalue" }
return 0;
@@ -663,9 +663,9 @@ five sink_3_345( A&&); // { dg-message "five sink_3_345|no known
int test3_345()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -682,9 +682,9 @@ six sink_3_346(const A&&); // { dg-message "six sink_3_346|no known
int test3_346()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -699,9 +699,9 @@ seven sink_3_347(volatile A&&); // { dg-message "seven sink_3_347|no know
int test3_347()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -716,9 +716,9 @@ six sink_3_356(const A&&); // { dg-message "six sink_3_356|no known
int test3_356()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -736,9 +736,9 @@ seven sink_3_357(volatile A&&); // { dg-message "seven sink_3_357|no know
int test3_357()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -757,9 +757,9 @@ eight sink_3_358(const volatile A&&); // { dg-message "" }
int test3_358()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_358(ca); // { dg-error "lvalue" }
sink_3_358(cva); // { dg-error "lvalue" }
return 0;
@@ -772,9 +772,9 @@ seven sink_3_367(volatile A&&); // { dg-message "seven sink_3_367|no know
int test3_367()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -792,9 +792,9 @@ eight sink_3_368(const volatile A&&); // { dg-message "" }
int test3_368()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_368(ca); // { dg-error "lvalue" }
sink_3_368(cva); // { dg-error "lvalue" }
return 0;
@@ -807,9 +807,9 @@ eight sink_3_378(const volatile A&&); // { dg-message "" }
int test3_378()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_3_378(ca); // { dg-error "lvalue" }
sink_3_378(cva); // { dg-error "lvalue" }
return 0;
@@ -822,9 +822,9 @@ six sink_3_456(const A&&); // { dg-message "note" }
int test3_456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -839,9 +839,9 @@ seven sink_3_457(volatile A&&); // { dg-message "note" }
int test3_457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -856,9 +856,9 @@ seven sink_3_467(volatile A&&); // { dg-message "note" }
int test3_467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -873,9 +873,9 @@ seven sink_3_567(volatile A&&); // { dg-message "seven sink_3_567|no know
int test3_567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -893,9 +893,9 @@ eight sink_3_568(const volatile A&&); // { dg-message "" }
int test3_568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -910,9 +910,9 @@ eight sink_3_578(const volatile A&&); // { dg-message "" }
int test3_578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -927,9 +927,9 @@ eight sink_3_678(const volatile A&&); // { dg-message "eight sink_3_678|no know
int test3_678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv4n.C b/gcc/testsuite/g++.dg/cpp0x/rv4n.C
index daff307985..076e9a0488 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv4n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv4n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -38,9 +38,9 @@ four sink_4_1234(const volatile A&); // { dg-message "note" }
int test4_1234()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -56,9 +56,9 @@ five sink_4_1235( A&&); // { dg-message "note" }
int test4_1235()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -76,9 +76,9 @@ six sink_4_1236(const A&&); // { dg-message "note" }
int test4_1236()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -96,9 +96,9 @@ seven sink_4_1237(volatile A&&); // { dg-message "note" }
int test4_1237()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -114,9 +114,9 @@ eight sink_4_1238(const volatile A&&); // { dg-message "" }
int test4_1238()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1238(cva); // { dg-error "lvalue" }
return 0;
}
@@ -129,9 +129,9 @@ five sink_4_1245( A&&); // { dg-message "note" }
int test4_1245()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -147,9 +147,9 @@ six sink_4_1246(const A&&); // { dg-message "note" }
int test4_1246()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -165,9 +165,9 @@ seven sink_4_1247(volatile A&&); // { dg-message "note" }
int test4_1247()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -181,9 +181,9 @@ six sink_4_1256(const A&&); // { dg-message "note" }
int test4_1256()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -203,9 +203,9 @@ seven sink_4_1257(volatile A&&); // { dg-message "" }
int test4_1257()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -222,9 +222,9 @@ eight sink_4_1258(const volatile A&&); // { dg-message "" }
int test4_1258()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1258(va); // { dg-error "lvalue" }
sink_4_1258(cva); // { dg-error "lvalue" }
return 0;
@@ -238,9 +238,9 @@ seven sink_4_1267(volatile A&&); // { dg-message "" }
int test4_1267()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -259,9 +259,9 @@ eight sink_4_1268(const volatile A&&); // { dg-message "" }
int test4_1268()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1268(va); // { dg-error "lvalue" }
sink_4_1268(cva); // { dg-error "lvalue" }
return 0;
@@ -275,9 +275,9 @@ eight sink_4_1278(const volatile A&&); // { dg-message "" }
int test4_1278()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1278(va); // { dg-error "lvalue" }
sink_4_1278(cva); // { dg-error "lvalue" }
return 0;
@@ -291,9 +291,9 @@ five sink_4_1345( A&&); // { dg-message "note" }
int test4_1345()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -311,9 +311,9 @@ six sink_4_1346(const A&&); // { dg-message "note" }
int test4_1346()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -329,9 +329,9 @@ seven sink_4_1347(volatile A&&); // { dg-message "note" }
int test4_1347()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -347,9 +347,9 @@ six sink_4_1356(const A&&); // { dg-message "" }
int test4_1356()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -368,9 +368,9 @@ seven sink_4_1357(volatile A&&); // { dg-message "note" }
int test4_1357()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -390,9 +390,9 @@ eight sink_4_1358(const volatile A&&); // { dg-message "" }
int test4_1358()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1358(ca); // { dg-error "lvalue" }
sink_4_1358(cva); // { dg-error "lvalue" }
return 0;
@@ -406,9 +406,9 @@ seven sink_4_1367(volatile A&&); // { dg-message "note" }
int test4_1367()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -427,9 +427,9 @@ eight sink_4_1368(const volatile A&&); // { dg-message "" }
int test4_1368()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1368(ca); // { dg-error "lvalue" }
sink_4_1368(cva); // { dg-error "lvalue" }
return 0;
@@ -443,9 +443,9 @@ eight sink_4_1378(const volatile A&&); // { dg-message "" }
int test4_1378()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_1378(ca); // { dg-error "lvalue" }
sink_4_1378(cva); // { dg-error "lvalue" }
return 0;
@@ -459,9 +459,9 @@ six sink_4_1456(const A&&); // { dg-message "note" }
int test4_1456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -477,9 +477,9 @@ seven sink_4_1457(volatile A&&); // { dg-message "note" }
int test4_1457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -495,9 +495,9 @@ seven sink_4_1467(volatile A&&); // { dg-message "note" }
int test4_1467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -513,9 +513,9 @@ seven sink_4_1567(volatile A&&); // { dg-message "" }
int test4_1567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -533,9 +533,9 @@ eight sink_4_1568(const volatile A&&); // { dg-message "" }
int test4_1568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -550,9 +550,9 @@ eight sink_4_1578(const volatile A&&); // { dg-message "" }
int test4_1578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -567,9 +567,9 @@ eight sink_4_1678(const volatile A&&); // { dg-message "" }
int test4_1678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -586,9 +586,9 @@ five sink_4_2345( A&&); // { dg-message "note" }
int test4_2345()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -606,9 +606,9 @@ six sink_4_2346(const A&&); // { dg-message "note" }
int test4_2346()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -626,9 +626,9 @@ seven sink_4_2347(volatile A&&); // { dg-message "note" }
int test4_2347()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -644,9 +644,9 @@ eight sink_4_2348(const volatile A&&); // { dg-message "note" }
int test4_2348()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_2348(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 650 }
return 0;
@@ -660,9 +660,9 @@ six sink_4_2356(const A&&); // { dg-message "note" }
int test4_2356()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -682,9 +682,9 @@ seven sink_4_2357(volatile A&&); // { dg-message "note" }
int test4_2357()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -702,9 +702,9 @@ eight sink_4_2358(const volatile A&&); // { dg-message "" }
int test4_2358()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -719,9 +719,9 @@ seven sink_4_2367(volatile A&&); // { dg-message "note" }
int test4_2367()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -741,9 +741,9 @@ eight sink_4_2368(const volatile A&&); // { dg-message "" }
int test4_2368()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -758,9 +758,9 @@ eight sink_4_2378(const volatile A&&); // { dg-message "" }
int test4_2378()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -775,9 +775,9 @@ six sink_4_2456(const A&&); // { dg-message "note" }
int test4_2456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -793,9 +793,9 @@ seven sink_4_2457(volatile A&&); // { dg-message "note" }
int test4_2457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -809,9 +809,9 @@ seven sink_4_2467(volatile A&&); // { dg-message "note" }
int test4_2467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -827,9 +827,9 @@ seven sink_4_2567(volatile A&&); // { dg-message "" }
int test4_2567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -846,9 +846,9 @@ eight sink_4_2568(const volatile A&&); // { dg-message "" }
int test4_2568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_2568(va); // { dg-error "lvalue" }
sink_4_2568(cva); // { dg-error "lvalue" }
return 0;
@@ -862,9 +862,9 @@ eight sink_4_2578(const volatile A&&); // { dg-message "" }
int test4_2578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_2578(va); // { dg-error "lvalue" }
sink_4_2578(cva); // { dg-error "lvalue" }
return 0;
@@ -878,9 +878,9 @@ eight sink_4_2678(const volatile A&&); // { dg-message "" }
int test4_2678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -896,9 +896,9 @@ six sink_4_3456(const A&&); // { dg-message "note" }
int test4_3456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -914,9 +914,9 @@ seven sink_4_3457(volatile A&&); // { dg-message "note" }
int test4_3457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -932,9 +932,9 @@ seven sink_4_3467(volatile A&&); // { dg-message "note" }
int test4_3467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -950,9 +950,9 @@ seven sink_4_3567(volatile A&&); // { dg-message "note" }
int test4_3567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -969,9 +969,9 @@ eight sink_4_3568(const volatile A&&); // { dg-message "" }
int test4_3568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_3568(ca); // { dg-error "lvalue" }
sink_4_3568(cva); // { dg-error "lvalue" }
return 0;
@@ -985,9 +985,9 @@ eight sink_4_3578(const volatile A&&); // { dg-message "" }
int test4_3578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_3578(ca); // { dg-error "lvalue" }
sink_4_3578(cva); // { dg-error "lvalue" }
return 0;
@@ -1001,9 +1001,9 @@ eight sink_4_3678(const volatile A&&); // { dg-message "" }
int test4_3678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -1019,9 +1019,9 @@ seven sink_4_4567(volatile A&&); // { dg-message "note" }
int test4_4567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -1035,9 +1035,9 @@ eight sink_4_4678(const volatile A&&); // { dg-message "note" }
int test4_4678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_4_4678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 1041 }
return 0;
@@ -1051,9 +1051,9 @@ eight sink_4_5678(const volatile A&&); // { dg-message "" }
int test4_5678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv5n.C b/gcc/testsuite/g++.dg/cpp0x/rv5n.C
index 660a68986a..d9b8cd2398 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv5n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv5n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -39,9 +39,9 @@ five sink_5_12345( A&&); // { dg-message "note" }
int test5_12345()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -58,9 +58,9 @@ six sink_5_12346(const A&&); // { dg-message "note" }
int test5_12346()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -77,9 +77,9 @@ seven sink_5_12347(volatile A&&); // { dg-message "note" }
int test5_12347()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -94,9 +94,9 @@ six sink_5_12356(const A&&); // { dg-message "note" }
int test5_12356()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -115,9 +115,9 @@ seven sink_5_12357(volatile A&&); // { dg-message "note" }
int test5_12357()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -134,9 +134,9 @@ eight sink_5_12358(const volatile A&&); // { dg-message "" }
int test5_12358()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_12358(cva); // { dg-error "lvalue" }
return 0;
}
@@ -150,9 +150,9 @@ seven sink_5_12367(volatile A&&); // { dg-message "note" }
int test5_12367()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -171,9 +171,9 @@ eight sink_5_12368(const volatile A&&); // { dg-message "" }
int test5_12368()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_12368(cva); // { dg-error "lvalue" }
return 0;
}
@@ -187,9 +187,9 @@ eight sink_5_12378(const volatile A&&); // { dg-message "" }
int test5_12378()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_12378(cva); // { dg-error "lvalue" }
return 0;
}
@@ -203,9 +203,9 @@ six sink_5_12456(const A&&); // { dg-message "note" }
int test5_12456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -222,9 +222,9 @@ seven sink_5_12457(volatile A&&); // { dg-message "note" }
int test5_12457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -239,9 +239,9 @@ seven sink_5_12467(volatile A&&); // { dg-message "note" }
int test5_12467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -258,9 +258,9 @@ seven sink_5_12567(volatile A&&); // { dg-message "" }
int test5_12567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -278,9 +278,9 @@ eight sink_5_12568(const volatile A&&); // { dg-message "" }
int test5_12568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_12568(va); // { dg-error "lvalue" }
sink_5_12568(cva); // { dg-error "lvalue" }
return 0;
@@ -295,9 +295,9 @@ eight sink_5_12578(const volatile A&&); // { dg-message "" }
int test5_12578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_12578(va); // { dg-error "lvalue" }
sink_5_12578(cva); // { dg-error "lvalue" }
return 0;
@@ -312,9 +312,9 @@ eight sink_5_12678(const volatile A&&); // { dg-message "" }
int test5_12678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -331,9 +331,9 @@ six sink_5_13456(const A&&); // { dg-message "note" }
int test5_13456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -350,9 +350,9 @@ seven sink_5_13457(volatile A&&); // { dg-message "note" }
int test5_13457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -369,9 +369,9 @@ seven sink_5_13467(volatile A&&); // { dg-message "note" }
int test5_13467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -388,9 +388,9 @@ seven sink_5_13567(volatile A&&); // { dg-message "note" }
int test5_13567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -408,9 +408,9 @@ eight sink_5_13568(const volatile A&&); // { dg-message "" }
int test5_13568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_13568(ca); // { dg-error "lvalue" }
sink_5_13568(cva); // { dg-error "lvalue" }
return 0;
@@ -425,9 +425,9 @@ eight sink_5_13578(const volatile A&&); // { dg-message "" }
int test5_13578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_13578(ca); // { dg-error "lvalue" }
sink_5_13578(cva); // { dg-error "lvalue" }
return 0;
@@ -442,9 +442,9 @@ eight sink_5_13678(const volatile A&&); // { dg-message "" }
int test5_13678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -461,9 +461,9 @@ seven sink_5_14567(volatile A&&); // { dg-message "note" }
int test5_14567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -478,9 +478,9 @@ eight sink_5_14678(const volatile A&&); // { dg-message "note" }
int test5_14678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_14678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 484 }
return 0;
@@ -495,9 +495,9 @@ eight sink_5_15678(const volatile A&&); // { dg-message "" }
int test5_15678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -513,9 +513,9 @@ six sink_5_23456(const A&&); // { dg-message "note" }
int test5_23456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -534,9 +534,9 @@ seven sink_5_23457(volatile A&&); // { dg-message "note" }
int test5_23457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -553,9 +553,9 @@ eight sink_5_23458(const volatile A&&); // { dg-message "note" }
int test5_23458()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_23458(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 559 }
return 0;
@@ -570,9 +570,9 @@ seven sink_5_23467(volatile A&&); // { dg-message "note" }
int test5_23467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -591,9 +591,9 @@ eight sink_5_23468(const volatile A&&); // { dg-message "note" }
int test5_23468()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_23468(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 597 }
return 0;
@@ -608,9 +608,9 @@ eight sink_5_23478(const volatile A&&); // { dg-message "note" }
int test5_23478()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_23478(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 614 }
return 0;
@@ -625,9 +625,9 @@ seven sink_5_23567(volatile A&&); // { dg-message "note" }
int test5_23567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -646,9 +646,9 @@ eight sink_5_23568(const volatile A&&); // { dg-message "" }
int test5_23568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -664,9 +664,9 @@ eight sink_5_23578(const volatile A&&); // { dg-message "" }
int test5_23578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -682,9 +682,9 @@ eight sink_5_23678(const volatile A&&); // { dg-message "" }
int test5_23678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -702,9 +702,9 @@ seven sink_5_24567(volatile A&&); // { dg-message "note" }
int test5_24567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -719,9 +719,9 @@ eight sink_5_24678(const volatile A&&); // { dg-message "note" }
int test5_24678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_24678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 725 }
return 0;
@@ -736,9 +736,9 @@ eight sink_5_25678(const volatile A&&); // { dg-message "" }
int test5_25678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_25678(va); // { dg-error "lvalue" }
sink_5_25678(cva); // { dg-error "lvalue" }
return 0;
@@ -753,9 +753,9 @@ seven sink_5_34567(volatile A&&); // { dg-message "note" }
int test5_34567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -770,9 +770,9 @@ eight sink_5_34678(const volatile A&&); // { dg-message "note" }
int test5_34678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_34678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 776 }
return 0;
@@ -787,9 +787,9 @@ eight sink_5_35678(const volatile A&&); // { dg-message "" }
int test5_35678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_5_35678(ca); // { dg-error "lvalue" }
sink_5_35678(cva); // { dg-error "lvalue" }
return 0;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv6n.C b/gcc/testsuite/g++.dg/cpp0x/rv6n.C
index d0fdbb7e50..fbc932de1e 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv6n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv6n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -40,9 +40,9 @@ six sink_6_123456(const A&&); // { dg-message "note" }
int test6_123456()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -60,9 +60,9 @@ seven sink_6_123457(volatile A&&); // { dg-message "note" }
int test6_123457()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -78,9 +78,9 @@ eight sink_6_235678(const volatile A&&); // { dg-message "" }
int test6_235678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -97,9 +97,9 @@ eight sink_6_234678(const volatile A&&); // { dg-message "note" }
int test6_234678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -117,9 +117,9 @@ eight sink_6_234578(const volatile A&&); // { dg-message "note" }
int test6_234578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_234578(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 123 }
return 0;
@@ -135,9 +135,9 @@ eight sink_6_234568(const volatile A&&); // { dg-message "note" }
int test6_234568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_234568(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 141 }
return 0;
@@ -153,9 +153,9 @@ seven sink_6_234567(volatile A&&); // { dg-message "note" }
int test6_234567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -173,9 +173,9 @@ eight sink_6_134678(const volatile A&&); // { dg-message "note" }
int test6_134678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_134678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 179 }
return 0;
@@ -191,9 +191,9 @@ eight sink_6_124678(const volatile A&&); // { dg-message "note" }
int test6_124678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_124678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 197 }
return 0;
@@ -209,9 +209,9 @@ eight sink_6_123678(const volatile A&&); // { dg-message "" }
int test6_123678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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 }
@@ -228,9 +228,9 @@ seven sink_6_123567(volatile A&&); // { dg-message "note" }
int test6_123567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -248,9 +248,9 @@ eight sink_6_123568(const volatile A&&); // { dg-message "" }
int test6_123568()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_123568(cva); // { dg-error "lvalue" }
return 0;
}
@@ -265,9 +265,9 @@ eight sink_6_123578(const volatile A&&); // { dg-message "" }
int test6_123578()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_123578(cva); // { dg-error "lvalue" }
return 0;
}
@@ -282,9 +282,9 @@ seven sink_6_123467(volatile A&&); // { dg-message "note" }
int test6_123467()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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" }
@@ -302,9 +302,9 @@ seven sink_6_124567(volatile A&&); // { dg-message "note" }
int test6_124567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -320,9 +320,9 @@ eight sink_6_125678(const volatile A&&); // { dg-message "" }
int test6_125678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_125678(va); // { dg-error "lvalue" }
sink_6_125678(cva); // { dg-error "lvalue" }
return 0;
@@ -338,9 +338,9 @@ seven sink_6_134567(volatile A&&); // { dg-message "note" }
int test6_134567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -356,9 +356,9 @@ eight sink_6_135678(const volatile A&&); // { dg-message "" }
int test6_135678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_6_135678(ca); // { dg-error "lvalue" }
sink_6_135678(cva); // { dg-error "lvalue" }
return 0;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv7n.C b/gcc/testsuite/g++.dg/cpp0x/rv7n.C
index 6071e05681..206cc79bb1 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv7n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv7n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
struct A
{
A();
- A(const volatile A&&); // { dg-error "argument 1" }
+ A(const volatile A&&);
};
A source();
@@ -41,9 +41,9 @@ seven sink_7_1234567(volatile A&&); // { dg-message "note" }
int test7_1234567()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ 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;
@@ -60,9 +60,9 @@ eight sink_7_1235678(const volatile A&&); // { dg-message "" }
int test7_1235678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_7_1235678(cva); // { dg-error "lvalue" }
return 0;
}
@@ -78,9 +78,9 @@ eight sink_7_2345678(const volatile A&&); // { dg-message "note" }
int test7_2345678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_7_2345678(a); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 84 }
return 0;
@@ -97,9 +97,9 @@ eight sink_7_1234678(const volatile A&&); // { dg-message "note" }
int test7_1234678()
{
A a;
- const A ca = a; // { dg-error "lvalue" }
+ const A ca = a; // { dg-error "deleted" }
volatile A va;
- const volatile A cva = a; // { dg-error "lvalue" }
+ const volatile A cva = a; // { dg-error "deleted" }
sink_7_1234678(source()); // { dg-error "ambiguous" }
// { dg-message "candidate" "candidate note" { target *-*-* } 103 }
return 0;
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae10.C b/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
index 72dbce080c..ede8b70424 100644
--- a/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
@@ -10,7 +10,9 @@ 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/testsuite/g++.dg/cpp0x/sfinae11.C b/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
index a3ffc34f9a..2e8408d8f4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
@@ -6,13 +6,14 @@ template<class T>
T&& declval() noexcept;
template< class T >
-inline void f1( T& x ) noexcept( noexcept( declval<T&>().foo() ) )
+inline void f1( T& x ) noexcept( noexcept( declval<T&>().foo() ) ) // { dg-error "Z" }
{
x.foo();
}
template< class T,
- bool Noexcept = noexcept( declval<T&>().foo() )
+ bool Noexcept = noexcept( declval<T&>().foo() ) // { dg-error "no member|not convert" }
+
>
inline void f2( T& x ) noexcept( Noexcept )
{
@@ -21,7 +22,7 @@ inline void f2( T& x ) noexcept( Noexcept )
// a common and trivial mistake
template< class T >
-inline void f3( T& x ) noexcept( declval<T&>().foo() )
+inline void f3( T& x ) noexcept( declval<T&>().foo() ) // { dg-error "Z" }
{
x.foo();
}
@@ -50,7 +51,7 @@ int main()
static_assert( noexcept( f2(y) ), "OK." );
// static_assert( noexcept( f3(y) ), "shall be ill-formed(OK)." );
- static_assert( noexcept( f1(z) ), "shall be ill-formed." ); // { dg-error "no match" }
+ noexcept( f1(z) ); // { dg-message "required" }
static_assert( noexcept( f2(z) ), "shall be ill-formed." ); // { dg-error "no match" }
- static_assert( !noexcept( f3(z) ), "shall be ill-formed." ); // { dg-error "no match" }
+ noexcept( f3(z) ); // { dg-message "required" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae12.C b/gcc/testsuite/g++.dg/cpp0x/sfinae12.C
new file mode 100644
index 0000000000..114f1b42da
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae12.C
@@ -0,0 +1,18 @@
+// PR c++/48535
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae13.C b/gcc/testsuite/g++.dg/cpp0x/sfinae13.C
new file mode 100644
index 0000000000..465df2d8b8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae13.C
@@ -0,0 +1,20 @@
+// PR c++/48581
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae14.C b/gcc/testsuite/g++.dg/cpp0x/sfinae14.C
new file mode 100644
index 0000000000..305f96eddc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae14.C
@@ -0,0 +1,27 @@
+// PR c++/48557
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae15.C b/gcc/testsuite/g++.dg/cpp0x/sfinae15.C
new file mode 100644
index 0000000000..595ca40b55
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae15.C
@@ -0,0 +1,12 @@
+// PR c++/48531
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae16.C b/gcc/testsuite/g++.dg/cpp0x/sfinae16.C
new file mode 100644
index 0000000000..6470567b7a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae16.C
@@ -0,0 +1,17 @@
+// PR c++/48531
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae17.C b/gcc/testsuite/g++.dg/cpp0x/sfinae17.C
new file mode 100644
index 0000000000..dbbd9efe41
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae17.C
@@ -0,0 +1,31 @@
+// PR c++/48530
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae18.C b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C
new file mode 100644
index 0000000000..bb54335e6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae18.C
@@ -0,0 +1,17 @@
+// PR c++/48530
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae19.C b/gcc/testsuite/g++.dg/cpp0x/sfinae19.C
new file mode 100644
index 0000000000..be96983bf3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae19.C
@@ -0,0 +1,13 @@
+// PR c++/48737
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/sfinae20.C b/gcc/testsuite/g++.dg/cpp0x/sfinae20.C
new file mode 100644
index 0000000000..486064c3af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae20.C
@@ -0,0 +1,23 @@
+// PR c++/48744
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/sfinae21.C b/gcc/testsuite/g++.dg/cpp0x/sfinae21.C
new file mode 100644
index 0000000000..4fba6eb82a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae21.C
@@ -0,0 +1,14 @@
+// PR c++/48735
+// { dg-options "-std=c++0x" }
+
+template<class T,
+ class = decltype(T{})
+>
+char f(int);
+
+template<class>
+char (&f(...))[2];
+
+struct ND { ND() = delete; };
+
+static_assert(sizeof(f<ND[1]>(0)) != 1, "Error");
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae22.C b/gcc/testsuite/g++.dg/cpp0x/sfinae22.C
index 2b9351a97f..1c3efd2e07 100644
--- a/gcc/testsuite/g++.dg/cpp0x/sfinae22.C
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae22.C
@@ -20,4 +20,4 @@ decltype(T{create<Args>()...}, char()) f(int);
template<class, class...>
char (&f(...))[2];
-static_assert(sizeof(f<int, void>(0)) != 1, "Error"); // { dg-bogus "void value" "" { xfail *-*-* } }
+static_assert(sizeof(f<int, void>(0)) != 1, "Error"); // #
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae24.C b/gcc/testsuite/g++.dg/cpp0x/sfinae24.C
new file mode 100644
index 0000000000..3e1d2e725b
--- /dev/null
+++ b/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-options -std=c++0x }
+// { 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>()( ) )>
+ R f() const; // { dg-error "no match" }
+};
+
+int main()
+{
+ Bind<F1> b;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae25.C b/gcc/testsuite/g++.dg/cpp0x/sfinae25.C
new file mode 100644
index 0000000000..7bdc8f88e5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae25.C
@@ -0,0 +1,10 @@
+// PR c++/49105
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae26.C b/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
index 6a4f679ce9..374f9976b2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae26.C
@@ -30,11 +30,9 @@ struct is_same<T, T> {
template<class... T>
struct S {
template<class... U,
- typename enable_if<and_<is_same<T, U>...>::value>::type*& = enabler
+ typename enable_if<and_<is_same<T, U>...>::value>::type*& = enabler // { dg-error "no type" }
>
- S(U...){} // #
+ S(U...){}
};
S<bool> s(0); // { dg-error "no match" }
-
-// { dg-prune-output "note" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae28.C b/gcc/testsuite/g++.dg/cpp0x/sfinae28.C
new file mode 100644
index 0000000000..da64f413c7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae28.C
@@ -0,0 +1,16 @@
+// PR c++/50324
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae29.C b/gcc/testsuite/g++.dg/cpp0x/sfinae29.C
new file mode 100644
index 0000000000..a2e10b41d3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae29.C
@@ -0,0 +1,17 @@
+// PR c++/51047
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae30.C b/gcc/testsuite/g++.dg/cpp0x/sfinae30.C
new file mode 100644
index 0000000000..6fcf5f7560
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/sfinae31.C b/gcc/testsuite/g++.dg/cpp0x/sfinae31.C
new file mode 100644
index 0000000000..ea151fe649
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae31.C
@@ -0,0 +1,13 @@
+// PR c++/51973
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae8.C b/gcc/testsuite/g++.dg/cpp0x/sfinae8.C
new file mode 100644
index 0000000000..7f3012f94d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae8.C
@@ -0,0 +1,14 @@
+// PR c++/48449
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/sfinae9.C b/gcc/testsuite/g++.dg/cpp0x/sfinae9.C
new file mode 100644
index 0000000000..6f1de21d51
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae9.C
@@ -0,0 +1,24 @@
+// PR c++/48450
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/static_assert3.C b/gcc/testsuite/g++.dg/cpp0x/static_assert3.C
index 1ff2ffc94f..0a4cbc98af 100644
--- a/gcc/testsuite/g++.dg/cpp0x/static_assert3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/static_assert3.C
@@ -1,4 +1,4 @@
// { dg-options "-std=c++0x" }
-static_assert(7 / 0, "X"); // { dg-error "non-constant condition" }
-// { dg-warning "division by zero" "" { target *-*-* } 2 }
-// { dg-error "7 / 0.. is not a constant expression" "" { target *-*-* } 2 }
+static_assert(7 / 0, "X"); // { dg-error "non-constant condition" "non-constant" }
+// { dg-warning "division by zero" "zero" { target *-*-* } 2 }
+// { dg-error "7 / 0.. is not a constant expression" "not a constant" { target *-*-* } 2 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/static_assert5.C b/gcc/testsuite/g++.dg/cpp0x/static_assert5.C
new file mode 100644
index 0000000000..b918796220
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/static_assert5.C
@@ -0,0 +1,21 @@
+// PR c++/50837
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/static_assert6.C b/gcc/testsuite/g++.dg/cpp0x/static_assert6.C
new file mode 100644
index 0000000000..d1ab0dded9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/static_assert6.C
@@ -0,0 +1,4 @@
+// PR c++/51397
+// { dg-options "-std=c++0x" }
+
+static_assert('X' != '\130', "'X' has the wrong value"); // { dg-error "'X' has the wrong value" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/temp_default2.C b/gcc/testsuite/g++.dg/cpp0x/temp_default2.C
index fa2bb6aed8..dab1650e44 100644
--- a/gcc/testsuite/g++.dg/cpp0x/temp_default2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/temp_default2.C
@@ -8,7 +8,7 @@ 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" "candidate note" { target *-*-* } 10 }
+ // { 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/testsuite/g++.dg/cpp0x/trailing2.C b/gcc/testsuite/g++.dg/cpp0x/trailing2.C
index e45204fe71..5f5af22947 100644
--- a/gcc/testsuite/g++.dg/cpp0x/trailing2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing2.C
@@ -3,14 +3,14 @@
// { dg-options "-std=c++0x" }
auto f1 () -> int;
-auto f2 (); // { dg-error "without late return type" }
-int f3 () -> int; // { dg-error "late return type" }
-auto *f4 () -> int; // { dg-error "late return type" }
+auto f2 (); // { dg-error "without trailing return type" }
+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 late return type" }
- int f7 () -> int; // { dg-error "late return type" }
- auto *f8 () -> int; // { dg-error "late return type" }
+ auto f6 (); // { dg-error "without trailing return type" }
+ int f7 () -> int; // { dg-error "trailing return type" }
+ auto *f8 () -> int; // { dg-error "trailing return type" }
};
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing3.C b/gcc/testsuite/g++.dg/cpp0x/trailing3.C
index 82d36f0d0d..1c64f45731 100644
--- a/gcc/testsuite/g++.dg/cpp0x/trailing3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing3.C
@@ -1,5 +1,5 @@
// More auto/decltype mangling tests.
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -fabi-version=0" }
template <class T>
struct B
@@ -58,6 +58,6 @@ int main()
A<int>().h(1);
// { dg-final { scan-assembler "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
A<int>().j(1);
- // { dg-final { scan-assembler "_Z1gIIidEEDTcl1fspplfp_Li1EEEDpT_" } }
+ // { dg-final { scan-assembler "_Z1gIJidEEDTcl1fspplfp_Li1EEEDpT_" } }
g(42, 1.0);
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing4.C b/gcc/testsuite/g++.dg/cpp0x/trailing4.C
index d67b3b6115..8d4baa97e5 100644
--- a/gcc/testsuite/g++.dg/cpp0x/trailing4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing4.C
@@ -8,5 +8,5 @@ auto f(T,U) -> decltype(T() + U())
template<class T> void g(T){} // { dg-message "note" }
int main() { g(f); } // { dg-error "no matching function" }
-// { dg-message "candidate" "candidate note" { target *-*-* } 10 }
+// { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 10 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing6.C b/gcc/testsuite/g++.dg/cpp0x/trailing6.C
new file mode 100644
index 0000000000..3476e90e58
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing6.C
@@ -0,0 +1,6 @@
+// PR c++/49003
+// { dg-options -std=c++0x }
+
+struct A {
+ auto a() const -> decltype(this) { return this; }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing7.C b/gcc/testsuite/g++.dg/cpp0x/trailing7.C
new file mode 100644
index 0000000000..c4db10ec80
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing7.C
@@ -0,0 +1,14 @@
+// PR c++/50365
+// { dg-options -std=c++0x }
+
+struct A { int i; };
+
+struct B {
+ B();
+ A* f();
+};
+
+B::B()
+{
+ int(f()->i);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing9.C b/gcc/testsuite/g++.dg/cpp0x/trailing9.C
new file mode 100644
index 0000000000..d7895b38e3
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/udlit-addr.C b/gcc/testsuite/g++.dg/cpp0x/udlit-addr.C
new file mode 100644
index 0000000000..7d3286e007
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-addr.C
@@ -0,0 +1,10 @@
+// { dg-options "-std=c++0x" }
+
+#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/testsuite/g++.dg/cpp0x/udlit-args-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C
new file mode 100644
index 0000000000..df7b7281c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C
@@ -0,0 +1,41 @@
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/udlit-args.C b/gcc/testsuite/g++.dg/cpp0x/udlit-args.C
new file mode 100644
index 0000000000..ca2039c59d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-args.C
@@ -0,0 +1,38 @@
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/udlit-args2.C b/gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
new file mode 100644
index 0000000000..1e7190fc8f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
@@ -0,0 +1,15 @@
+// PR c++/52521
+// { dg-do compile }
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/udlit-clink-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C
new file mode 100644
index 0000000000..a80e7244af
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-clink-neg.C
@@ -0,0 +1,8 @@
+// { dg-options -std=c++0x }
+
+extern "C" {
+
+int
+operator"" _badclinkage(unsigned long long); // { dg-error "operator with C linkage" }
+
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C
new file mode 100644
index 0000000000..61dc2ab02c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-concat-neg.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+#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/testsuite/g++.dg/cpp0x/udlit-concat.C b/gcc/testsuite/g++.dg/cpp0x/udlit-concat.C
new file mode 100644
index 0000000000..612bc1d111
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-concat.C
@@ -0,0 +1,24 @@
+// { dg-options "-std=c++0x" }
+
+#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/testsuite/g++.dg/cpp0x/udlit-constexpr.C b/gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C
new file mode 100644
index 0000000000..40b0dfac53
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-constexpr.C
@@ -0,0 +1,7 @@
+// { dg-options -std=c++0x }
+
+constexpr unsigned long long
+operator"" _grow(unsigned long long n)
+{ return 2 * n; }
+
+double buffer[25_grow];
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-cpp98-neg.C
new file mode 100644
index 0000000000..cb4c359658
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/udlit-declare-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C
new file mode 100644
index 0000000000..9060abba49
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C
@@ -0,0 +1,15 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-embed-quote.C b/gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C
new file mode 100644
index 0000000000..48a2a1b171
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-embed-quote.C
@@ -0,0 +1,34 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-friend.C b/gcc/testsuite/g++.dg/cpp0x/udlit-friend.C
new file mode 100644
index 0000000000..b3f3ef8a60
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-friend.C
@@ -0,0 +1,28 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/udlit-general.C b/gcc/testsuite/g++.dg/cpp0x/udlit-general.C
new file mode 100644
index 0000000000..9e448ac805
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-general.C
@@ -0,0 +1,52 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C
new file mode 100644
index 0000000000..998ad155bf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-implicit-conv-neg.C
@@ -0,0 +1,63 @@
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/udlit-inline.C b/gcc/testsuite/g++.dg/cpp0x/udlit-inline.C
new file mode 100644
index 0000000000..75032c5767
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-inline.C
@@ -0,0 +1,22 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C
new file mode 100644
index 0000000000..c2ecede8d4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-linkage-neg.C
@@ -0,0 +1,7 @@
+// { dg-options -std=c++0x }
+
+extern "C"_badlinkage { // { dg-error "expected unqualified-id before" }
+
+int foo();
+
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C b/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C
new file mode 100644
index 0000000000..6de31b65ea
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C
@@ -0,0 +1,8 @@
+// PR c++/52521
+// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "_Zli2_wPKc" } }
+
+int operator "" _w(const char*);
+int main() {
+ 123_w;
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C
new file mode 100644
index 0000000000..a6220c4c0f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C
@@ -0,0 +1,15 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/udlit-namespace.C b/gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C
new file mode 100644
index 0000000000..e5d54e5190
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-namespace.C
@@ -0,0 +1,43 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C
new file mode 100644
index 0000000000..6ad79b85b1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-nofunc-neg.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C
new file mode 100644
index 0000000000..981865f152
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-nonempty-str-neg.C
@@ -0,0 +1,6 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C
new file mode 100644
index 0000000000..2b57637a91
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-nospace-neg.C
@@ -0,0 +1,3 @@
+// { dg-options "-std=c++0x" }
+
+float operator ""_abc(const char*); // { dg-error "missing space between|and suffix identifier" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C
new file mode 100644
index 0000000000..b90635cd0f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-nosuffix-neg.C
@@ -0,0 +1,5 @@
+// { dg-options -std=c++0x }
+
+char32_t
+operator"" (char32_t C) // { dg-error "expected suffix identifier" }
+{ return C; }
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C
new file mode 100644
index 0000000000..2067bbe561
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-nounder-neg.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-operator-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C
new file mode 100644
index 0000000000..27fdedec76
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-operator-neg.C
@@ -0,0 +1,42 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C
new file mode 100644
index 0000000000..23633390cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-preproc-neg.C
@@ -0,0 +1,9 @@
+// { dg-options "-std=c++0x" }
+
+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/testsuite/g++.dg/cpp0x/udlit-raw-length.C b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C
new file mode 100644
index 0000000000..2d910624a7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-length.C
@@ -0,0 +1,27 @@
+// { dg-options "-std=c++0x" }
+// 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/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C
new file mode 100644
index 0000000000..58ad0e609d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op-string-neg.C
@@ -0,0 +1,8 @@
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-raw-op.C b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C
new file mode 100644
index 0000000000..a31ef9328d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-op.C
@@ -0,0 +1,21 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+#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/testsuite/g++.dg/cpp0x/udlit-raw-str.C b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C
new file mode 100644
index 0000000000..e94410fd06
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-raw-str.C
@@ -0,0 +1,15 @@
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/udlit-resolve.C b/gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C
new file mode 100644
index 0000000000..a25516220c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-resolve.C
@@ -0,0 +1,40 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+#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/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C
new file mode 100644
index 0000000000..994d58c1a0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-shadow-neg.C
@@ -0,0 +1,49 @@
+// { dg-options -std=c++0x }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-string-length.C b/gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C
new file mode 100644
index 0000000000..86903e8355
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-string-length.C
@@ -0,0 +1,46 @@
+// { dg-options "-std=c++0x" }
+// 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/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C
new file mode 100644
index 0000000000..56eab01d73
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-suffix-neg.C
@@ -0,0 +1,5 @@
+// { dg-options -std=c++0x }
+
+#include <string>
+
+std::string operator"" 5X(const char*, std::size_t); // { dg-error "expected suffix identifier" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C b/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C
new file mode 100644
index 0000000000..599c8652a1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-systemheader.C
@@ -0,0 +1,3 @@
+// { dg-options -std=c++0x }
+
+#include "udlit_system_header"
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-template.C b/gcc/testsuite/g++.dg/cpp0x/udlit-template.C
new file mode 100644
index 0000000000..6a28f74a22
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-template.C
@@ -0,0 +1,51 @@
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+// 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/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C
new file mode 100644
index 0000000000..e8ccb6f545
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg.C
@@ -0,0 +1,4 @@
+// { dg-options -std=c++0x }
+
+template<char...>
+ int operator"" _xyz(unsigned long long); // { dg-error "has invalid argument list" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C
new file mode 100644
index 0000000000..6324823fab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg.C
@@ -0,0 +1,4 @@
+// { dg-options -std=c++0x }
+
+template<char...>
+ int operator"" _abc();
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C
new file mode 100644
index 0000000000..4dab4d2f6f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C
new file mode 100644
index 0000000000..77456737c7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms.C
@@ -0,0 +1,6 @@
+// { dg-options -std=c++0x }
+
+class Foo { };
+
+template<char...>
+ Foo operator"" _Foo();
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit_system_header b/gcc/testsuite/g++.dg/cpp0x/udlit_system_header
new file mode 100644
index 0000000000..d541f24f62
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/union1.C b/gcc/testsuite/g++.dg/cpp0x/union1.C
index 291853d5aa..cb0f01719c 100644
--- a/gcc/testsuite/g++.dg/cpp0x/union1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/union1.C
@@ -14,8 +14,8 @@ union B
A a; // { dg-error "union member" }
};
-B b; // { dg-error "B::B\\(\\)" }
-B b2(b); // { dg-error "B::B\\(const B&\\)" }
+B b; // { dg-error "B::B\\(\\)" "B::B" }
+B b2(b); // { dg-error "B::B\\(const B&\\)" "B::B" }
struct C
{
@@ -25,10 +25,10 @@ struct C
};
};
-C c; // { dg-error "C::C\\(\\)" }
-C c2(c); // { dg-error "C::C\\(const C&\\)" }
+C c; // { dg-error "C::C\\(\\)" "C::C" }
+C c2(c); // { dg-error "C::C\\(const C&\\)" "C::C" }
-// { dg-error "B::~B" "" { target *-*-* } 17 }
-// { dg-error "B::~B" "" { target *-*-* } 18 }
-// { dg-error "C::~C" "" { target *-*-* } 28 }
-// { dg-error "C::~C" "" { target *-*-* } 29 }
+// { 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/testsuite/g++.dg/cpp0x/variadic-default.C b/gcc/testsuite/g++.dg/cpp0x/variadic-default.C
new file mode 100644
index 0000000000..2625e259f7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-default.C
@@ -0,0 +1,12 @@
+// PR c++/49205
+// { dg-options -std=c++0x }
+
+#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/testsuite/g++.dg/cpp0x/variadic-ex10.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
index a392bd7d43..e8b6b72214 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex10.C
@@ -4,6 +4,6 @@ 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" }
-// { dg-error "expected a type" "" { target *-*-* } 7 }
-// { dg-error "in declaration" "" { target *-*-* } 7 }
+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/testsuite/g++.dg/cpp0x/variadic-ex14.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
index f33ca0e861..105096a78b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex14.C
@@ -8,12 +8,12 @@ template<template<class> class P> class X { /* ... */ };
template<template<class...> class Q> class Y { /* ... */ };
X<A> xA; // okay
-X<B> xB; // { dg-error "mismatch" }
-// { dg-error "expected a template" "" { target *-*-* } 11 }
-// { dg-error "invalid type" "" { target *-*-* } 11 }
-X<C> xC; // { dg-error "mismatch" }
-// { dg-error "expected a template" "" { target *-*-* } 14 }
-// { dg-error "invalid type" "" { target *-*-* } 14 }
+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/testsuite/g++.dg/cpp0x/variadic-ex3.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
index bd973055d0..018eaa3ed8 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex3.C
@@ -4,8 +4,8 @@ void g()
{
int i = f<int>(5.6);
int j = f(5.6); // { dg-error "no matching" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 6 }
+ // { 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" "candidate note" { target *-*-* } 9 }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 9 }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C b/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
index 5bf211696a..0a777c4853 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-ex4.C
@@ -8,6 +8,6 @@ void g()
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" "candidate note" { target *-*-* } 10 }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 10 }
f2<char, short, int, long>(); // okay
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C
new file mode 100644
index 0000000000..a097f43d21
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-explicit1.C
@@ -0,0 +1,11 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/variadic-explicit2.C b/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C
new file mode 100644
index 0000000000..4a80745293
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C
new file mode 100644
index 0000000000..a64d7971c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic-nondeduce1.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/variadic-value1.C b/gcc/testsuite/g++.dg/cpp0x/variadic-value1.C
new file mode 100644
index 0000000000..179919a5bc
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic103.C b/gcc/testsuite/g++.dg/cpp0x/variadic103.C
index 6d12331d00..9d6b5ea20b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic103.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic103.C
@@ -5,7 +5,7 @@ T&& create();
template<class T, class... Args>
void test() {
- T t(create<Args>()...); // { dg-error "unknown bound" }
+ T t(create<Args>()...); // { dg-error "incomplete" }
(void) t;
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic105.C b/gcc/testsuite/g++.dg/cpp0x/variadic105.C
index 24d7e15be2..66d24a7efe 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic105.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic105.C
@@ -20,5 +20,6 @@ struct call_sum {
int main() {
// This shouldn't be an error; this is bug 35722.
- reverse<call_sum>(1,2); // { dg-bogus "no match" "" { xfail *-*-* } }
+ reverse<call_sum>(1,2); // { dg-bogus "no match" "" }
+ // { dg-bogus "sorry, unimplemented" "candidate explanation" { target *-*-* } 6 }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic107.C b/gcc/testsuite/g++.dg/cpp0x/variadic107.C
new file mode 100644
index 0000000000..5c3f468515
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic107.C
@@ -0,0 +1,15 @@
+// PR c++/48451
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/variadic111.C b/gcc/testsuite/g++.dg/cpp0x/variadic111.C
index 378162e162..cb94ce6975 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic111.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic111.C
@@ -1,5 +1,5 @@
// PR c++/48424
-// { dg-options -std=c++0x }
+// { dg-options "-std=c++0x -fabi-version=0" }
template<typename... Args1>
struct S
@@ -16,4 +16,4 @@ int main()
s.f(1,2.0,false,'a');
}
-// { dg-final { scan-assembler "_ZN1SIIidEE1fIIbcEEEvidDpOT_" } }
+// { dg-final { scan-assembler "_ZN1SIJidEE1fIJbcEEEvidDpOT_" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic112.C b/gcc/testsuite/g++.dg/cpp0x/variadic112.C
new file mode 100644
index 0000000000..1640657d95
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic112.C
@@ -0,0 +1,19 @@
+// PR c++/49420
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/variadic117.C b/gcc/testsuite/g++.dg/cpp0x/variadic117.C
new file mode 100644
index 0000000000..22f2fc5ae2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic117.C
@@ -0,0 +1,11 @@
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/variadic118.C b/gcc/testsuite/g++.dg/cpp0x/variadic118.C
new file mode 100644
index 0000000000..43bf9bab21
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic118.C
@@ -0,0 +1,11 @@
+// This should fail deduction, before it produces a candidate.
+// { dg-options -std=c++0x }
+
+template <class... T>
+void f(T... ts); // { dg-message "deduction" }
+
+struct B { };
+int main()
+{
+ f<int>(B(), 1); // { dg-error "" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic119.C b/gcc/testsuite/g++.dg/cpp0x/variadic119.C
new file mode 100644
index 0000000000..78cd23e205
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic120.C b/gcc/testsuite/g++.dg/cpp0x/variadic120.C
new file mode 100644
index 0000000000..e26ee4e9ab
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic121.C b/gcc/testsuite/g++.dg/cpp0x/variadic121.C
new file mode 100644
index 0000000000..805c0065fe
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic121.C
@@ -0,0 +1,12 @@
+// PR c++/51507
+// { dg-options -std=c++0x }
+
+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/testsuite/g++.dg/cpp0x/variadic122.C b/gcc/testsuite/g++.dg/cpp0x/variadic122.C
new file mode 100644
index 0000000000..7f03c107c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic122.C
@@ -0,0 +1,22 @@
+// PR c++/52043
+// { dg-options "-std=c++11 -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/testsuite/g++.dg/cpp0x/variadic123.C b/gcc/testsuite/g++.dg/cpp0x/variadic123.C
new file mode 100644
index 0000000000..f0ab9fc22a
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic124.C b/gcc/testsuite/g++.dg/cpp0x/variadic124.C
new file mode 100644
index 0000000000..8ddc810b31
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic124.C
@@ -0,0 +1,29 @@
+// PR c++/52292
+// { dg-options -std=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/testsuite/g++.dg/cpp0x/variadic125.C b/gcc/testsuite/g++.dg/cpp0x/variadic125.C
new file mode 100644
index 0000000000..89fd6b00d1
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic128.C b/gcc/testsuite/g++.dg/cpp0x/variadic128.C
new file mode 100644
index 0000000000..8c2d3b2335
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic129.C b/gcc/testsuite/g++.dg/cpp0x/variadic129.C
new file mode 100644
index 0000000000..7118301418
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic131.C b/gcc/testsuite/g++.dg/cpp0x/variadic131.C
new file mode 100644
index 0000000000..3006f87ed2
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic132.C b/gcc/testsuite/g++.dg/cpp0x/variadic132.C
new file mode 100644
index 0000000000..1b9c286868
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic133.C b/gcc/testsuite/g++.dg/cpp0x/variadic133.C
new file mode 100644
index 0000000000..0265f0991c
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic134.C b/gcc/testsuite/g++.dg/cpp0x/variadic134.C
new file mode 100644
index 0000000000..d4181b02c8
--- /dev/null
+++ b/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/testsuite/g++.dg/cpp0x/variadic2.C b/gcc/testsuite/g++.dg/cpp0x/variadic2.C
index d62a54245e..207a80648f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic2.C
@@ -8,8 +8,8 @@ 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" }
-// { dg-error "invalid type" "" { target *-*-* } 11 }
+typedef two_or_more<int> bad; // { dg-error "2 or more" "2 or more" }
+// { dg-error "invalid type" "invalid type" { target *-*-* } 11 }
void f()
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic20.C b/gcc/testsuite/g++.dg/cpp0x/variadic20.C
index 7f2446e558..bfb42bea09 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic20.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic20.C
@@ -37,11 +37,11 @@ struct metatuple<First, Second, Metafunctions...> { // { dg-error "struct" }
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" }
+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" }
+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" "" { target *-*-* } 40 }
-// { dg-error "incomplete" "" { target *-*-* } 42 }
+// { dg-error "incomplete" "incomplete" { target *-*-* } 40 }
+// { dg-error "incomplete" "incomplete" { target *-*-* } 42 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic35.C b/gcc/testsuite/g++.dg/cpp0x/variadic35.C
index 1f21976e86..666a1f5d03 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic35.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic35.C
@@ -5,6 +5,5 @@ 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 "no matching function" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 8 }
+ get_ith<1, int, double, char, int>(1, 2.0, 'x'); // { dg-error "too few arguments" }
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic4.C b/gcc/testsuite/g++.dg/cpp0x/variadic4.C
index 9257a92d5b..1bdad3256f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic4.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++0x" }
+// { dg-options "-std=gnu++0x -fabi-version=0" }
// { dg-do compile }
template<typename... Args>
class tuple {};
@@ -9,7 +9,7 @@ void f_two(tuple<int, float>) {}
void f_nested(tuple<int, tuple<double, char>, float>) { }
-// { dg-final { scan-assembler "_Z6f_none5tupleIIEE" } }
-// { dg-final { scan-assembler "_Z5f_one5tupleIIiEE" } }
-// { dg-final { scan-assembler "_Z5f_two5tupleIIifEE" } }
-// { dg-final { scan-assembler "_Z8f_nested5tupleIIiS_IIdcEEfEE" } }
+// { 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/testsuite/g++.dg/cpp0x/variadic42.C b/gcc/testsuite/g++.dg/cpp0x/variadic42.C
index 47d9b66da5..3ec68e8b1f 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic42.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic42.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++0x" }
+// { dg-options "-std=gnu++0x -fabi-version=5" }
// { dg-do compile }
template<typename... Args>
void f(Args...) { }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic60.C b/gcc/testsuite/g++.dg/cpp0x/variadic60.C
index b86711ff66..8e1681eecc 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic60.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic60.C
@@ -1 +1 @@
-template<typename... Args> class tuple; // { dg-error "variadic templates" }
+template<typename... Args> class tuple; // { dg-error "variadic templates" "" { target c++98 } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic65.C b/gcc/testsuite/g++.dg/cpp0x/variadic65.C
index 1c815d1d90..77be10676a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic65.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic65.C
@@ -5,4 +5,9 @@ template<typename T1 = unused, typename T2 = unused, typename T3 = unused,
struct tuple {};
template<typename... Args>
-void foo(tuple<Args...>) { } // { dg-bogus "cannot expand" "" { xfail *-*-* } }
+tuple<Args...> foo() { } // { dg-bogus "cannot expand" "" }
+
+int main()
+{
+ foo<int,int,int,int,int,int>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic74.C b/gcc/testsuite/g++.dg/cpp0x/variadic74.C
index 19b6b11d8e..312fe9d704 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic74.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic74.C
@@ -1,8 +1,8 @@
-// { dg-options "-std=gnu++0x" }
+// { 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 constant parameter" }
+ template <Types... Values> class X { /* ... */ }; // { dg-error "not a valid type for a template non-type parameter" }
};
template<class... Types> class B
@@ -19,8 +19,8 @@ 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" }
-// { dg-error "invalid type" "" { target *-*-* } 22 }
-A<int*, float*>::X<&i, &f, &f> apple3; // { dg-error "wrong number of template arguments" }
-// { dg-error "invalid type" "" { target *-*-* } 24 }
+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;
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic82.C b/gcc/testsuite/g++.dg/cpp0x/variadic82.C
index fb3ddb3c9b..03aec80211 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic82.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic82.C
@@ -3,9 +3,9 @@
template<typename> struct A;
-template<typename... T> struct A<T*...> // { dg-bogus "cannot expand" "" { xfail *-*-* } }
+template<typename... T> struct A<T*...> // { dg-bogus "cannot expand" "" }
{
struct B;
};
-A<void*> a; // { dg-bogus "incomplete type" "" { xfail *-*-* } }
+A<void*> a; // { dg-bogus "incomplete type" "" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic83.C b/gcc/testsuite/g++.dg/cpp0x/variadic83.C
index 2613d625f0..c446e69742 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic83.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic83.C
@@ -3,6 +3,6 @@
template<typename> struct A;
-template<typename... T> struct A<T...> { }; // { dg-bogus "cannot expand" "" { xfail *-*-* } }
+template<typename... T> struct A<T...> { }; // { dg-bogus "cannot expand" "" }
-A<int> a; // { dg-bogus "incomplete type" "" { xfail *-*-* } }
+A<int> a; // { dg-bogus "incomplete type" "" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C b/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C
index 2ff7e5b0b5..5514259ec3 100644
--- a/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/vt-37737-2.C
@@ -4,7 +4,7 @@ template<class U, class... T>
void f() // { dg-message "note" }
{
f<T...>(); // { dg-error "no matching" }
- // { dg-message "candidate" "candidate note" { target *-*-* } 6 }
+ // { dg-message "(candidate|deduce template parameter)" "candidate note" { target *-*-* } 6 }
}
template<>
diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-55542.C b/gcc/testsuite/g++.dg/cpp0x/vt-55542.C
new file mode 100644
index 0000000000..3d5efee87d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/vt-55542.C
@@ -0,0 +1,22 @@
+// PR c++/55542
+// { dg-options "-std=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/testsuite/g++.dg/cpp0x/warn_cxx0x.C b/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C
index 5ad9b61b83..5c5eeffb35 100644
--- a/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C
+++ b/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x.C
@@ -1,6 +1,6 @@
-// { dg-options "-std=gnu++98 -Wc++0x-compat" }
-int static_assert; // { dg-warning "will become a keyword" }
-int nullptr; // { dg-warning "will become a keyword" }
+// { 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()
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C b/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C
new file mode 100644
index 0000000000..116b233176
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x2.C
@@ -0,0 +1,4 @@
+// PR c++/50810
+// { dg-options "-std=gnu++98 -Wc++11-compat" }
+
+signed char data[] = { 0xff }; // { dg-warning "narrowing" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C b/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C
new file mode 100644
index 0000000000..c3df9d99ed
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/warn_cxx0x3.C
@@ -0,0 +1,4 @@
+// PR c++/50810
+// { dg-options "-std=gnu++98 -Wc++11-compat -Wno-narrowing" }
+
+signed char data[] = { 0xff };