aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.old-deja/g++.pt/instantiate11.C
blob: 6832d1760578344d04230ebd62fe0fa4c228a55f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// { dg-do assemble  }
// Origin: Neil Booth, from bug report #36

template <typename t> class vect;
template <typename t> vect<t> operator-( const vect<t>&, const vect<t>& );

template <typename t>
class vect
{
public:
  vect( t a );

  vect( const vect<t>& v );
  ~vect();

  vect<t>& operator=( const vect<t>& v );
  vect<t>  operator-( void ) const;
  friend vect<t> (::operator- <>)( const vect<t>&, const vect<t>& );

private:
  t a_;
};

template <typename t> inline
vect<t>::vect( t a )
: a_(a)
{
}

template <typename t> inline
vect<t>::vect( const vect<t>& v )
: a_(v.a_)
{
}

template <typename t> inline
vect<t>::~vect()
{
}

template <typename t> inline vect<t>& 
vect<t>::operator=( const vect<t>& v )
{
   a_ = v.a_;
   return *this;
}

template <typename t> inline vect<t>
vect<t>::operator-( void ) const
{
  return vect<t>( -a_ );
}

template <typename t> inline vect<t>
operator-( const vect<t>& u, const vect<t>& v )
{
  return vect<t>( u.a_ - v.a_ );
}

int
main( void )
{
  vect<double> a( 1.0 ), b( 0.0 );
  b = -a;
}