// { dg-do assemble }
|
// { dg-do assemble }
|
// { dg-options "-Wno-deprecated" }
|
// { dg-options "-Wno-deprecated" }
|
/* bug.cc */
|
/* bug.cc */
|
/* simple program to demonstrate the bug with named return values in gcc
|
/* simple program to demonstrate the bug with named return values in gcc
|
*/
|
*/
|
/* (w) 4.9.97 by Kurt Garloff */
|
/* (w) 4.9.97 by Kurt Garloff */
|
// 8/28/1998 - This dies in add_conversions from dfs_walk, null CLASSTYPE_METHOD_VEC
|
// 8/28/1998 - This dies in add_conversions from dfs_walk, null CLASSTYPE_METHOD_VEC
|
// for the test record_type. This is marked as an expected failure for now,
|
// for the test record_type. This is marked as an expected failure for now,
|
// until we actually fix it.
|
// until we actually fix it.
|
|
|
#include
|
#include
|
|
|
template class test;
|
template class test;
|
template test operator + (const test& a, const test& b);
|
template test operator + (const test& a, const test& b);
|
|
|
// A simple numerical class
|
// A simple numerical class
|
template
|
template
|
class test
|
class test
|
{
|
{
|
T elem;
|
T elem;
|
public:
|
public:
|
test () { elem = 0; };
|
test () { elem = 0; };
|
test (const T& a) { elem = a; };
|
test (const T& a) { elem = a; };
|
test& operator += (const test& a) { elem += a.elem; return *this; };
|
test& operator += (const test& a) { elem += a.elem; return *this; };
|
friend test operator + <> (const test&, const test&);
|
friend test operator + <> (const test&, const test&);
|
friend std::ostream& operator << (std::ostream& os, const test& a)
|
friend std::ostream& operator << (std::ostream& os, const test& a)
|
{ return os << a.elem; };
|
{ return os << a.elem; };
|
};
|
};
|
|
|
// named return value version
|
// named return value version
|
template
|
template
|
test operator + (const test& a, const test& b) return c(a);// { dg-error "" } named return value
|
test operator + (const test& a, const test& b) return c(a);// { dg-error "" } named return value
|
{ c += b; } // { dg-error "" } c undeclared
|
{ c += b; } // { dg-error "" } c undeclared
|
|
|
int main()
|
int main()
|
{
|
{
|
test x, y;
|
test x, y;
|
x += 5;
|
x += 5;
|
std::cout << x << std::endl;
|
std::cout << x << std::endl;
|
y = x + test(2);
|
y = x + test(2);
|
std::cout << y << std::endl;
|
std::cout << y << std::endl;
|
}
|
}
|
|
|