view gcc/testsuite/g++.old-deja/g++.other/inline14.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

// { dg-do assemble  }
// Origin: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>

#include <iostream>

struct IDENT
    {
    enum TYPE { Variable, Constant } type;

    std::ostream& printTo(std::ostream& out) const
	{
	switch (type)
	    {
	    case Variable:
		out << '_';
		break;
	    default:
		break;
	    }
	return out;
	}
    };


template <class T>
struct TC
    {
    IDENT i;

    const IDENT& getIdent() const
        {
	return i;
	}
    };

template <class T>
inline std::ostream& operator<< (std::ostream& out, const TC<T> &c)
    {
    c.getIdent().printTo(out);
    return out;
    }

void foo(const TC<IDENT> &c)
    {
    std::cerr << c 
         << ": " // This line is crucial!
         << c
         << std::endl;
    }