1217309Snwhitehorn// Build don't link:
2251843Sbapt// Origin: Neil Booth, from bug report #36
3217309Snwhitehorn
4217309Snwhitehorntemplate <typename t> class vect;
5217309Snwhitehorntemplate <typename t> vect<t> operator-( const vect<t>&, const vect<t>& );
6251843Sbapt
7217309Snwhitehorntemplate <typename t>
8217309Snwhitehornclass vect
9217309Snwhitehorn{
10217309Snwhitehornpublic:
11217309Snwhitehorn  vect( t a );
12217309Snwhitehorn
13217309Snwhitehorn  vect( const vect<t>& v );
14217309Snwhitehorn  ~vect();
15217309Snwhitehorn
16217309Snwhitehorn  vect<t>& operator=( const vect<t>& v );
17217309Snwhitehorn  vect<t>  operator-( void ) const;
18217309Snwhitehorn  friend vect<t> operator- <>( const vect<t>&, const vect<t>& );
19217309Snwhitehorn
20217309Snwhitehornprivate:
21217309Snwhitehorn  t a_;
22217309Snwhitehorn};
23217309Snwhitehorn
24217309Snwhitehorntemplate <typename t> inline
25217309Snwhitehornvect<t>::vect( t a )
26217309Snwhitehorn: a_(a)
27217309Snwhitehorn{
28217309Snwhitehorn}
29217309Snwhitehorn
30217309Snwhitehorntemplate <typename t> inline
31217309Snwhitehornvect<t>::vect( const vect<t>& v )
32217309Snwhitehorn: a_(v.a_)
33217309Snwhitehorn{
34217309Snwhitehorn}
35217309Snwhitehorn
36217309Snwhitehorntemplate <typename t> inline
37217309Snwhitehornvect<t>::~vect()
38217309Snwhitehorn{
39217309Snwhitehorn}
40217309Snwhitehorn
41217309Snwhitehorntemplate <typename t> inline vect<t>&
42217309Snwhitehornvect<t>::operator=( const vect<t>& v )
43217309Snwhitehorn{
44217309Snwhitehorn   a_ = v.a_;
45217309Snwhitehorn   return *this;
46217309Snwhitehorn}
47217309Snwhitehorn
48217309Snwhitehorntemplate <typename t> inline vect<t>
49217309Snwhitehornvect<t>::operator-( void ) const
50217309Snwhitehorn{
51217309Snwhitehorn  return vect<t>( -a_ );
52217309Snwhitehorn}
53217309Snwhitehorn
54217309Snwhitehorntemplate <typename t> inline vect<t>
55217309Snwhitehornoperator-( const vect<t>& u, const vect<t>& v )
56217309Snwhitehorn{
57217309Snwhitehorn  return vect<t>( u.a_ - v.a_ );
58217309Snwhitehorn}
59217309Snwhitehorn
60217309Snwhitehornint
61217309Snwhitehornmain( void )
62217309Snwhitehorn{
63217309Snwhitehorn  vect<double> a( 1.0 ), b( 0.0 );
64217309Snwhitehorn  b = -a;
65217309Snwhitehorn}
66217309Snwhitehorn