//: C05:Box1.cpp // From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison. // (c) 1995-2004 MindView, Inc. All Rights Reserved. // See source code use permissions stated in the file 'License.txt', // distributed with the code package available at www.MindView.net. // Defines template operators. #include using namespace std; // Forward declarations template class Box; template Box operator+(const Box&, const Box&); template ostream& operator<<(ostream&, const Box&); template class Box { T t; public: Box(const T& theT) : t(theT) {} friend Box operator+<>(const Box&, const Box&); friend ostream& operator<< <>(ostream&, const Box&); }; template Box operator+(const Box& b1, const Box& b2) { return Box(b1.t + b2.t); } template ostream& operator<<(ostream& os, const Box& b) { return os << '[' << b.t << ']'; } int main() { Box b1(1), b2(2); cout << b1 + b2 << endl; // [3] // cout << b1 + 2 << endl; // No implicit conversions! } ///:~