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
| // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main
// g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++98 -pedantic -fopenmp main.cpp -o main && ./main
#include <iostream>
#include <algorithm>
template <class T>
class point
{
public:
T x;
T y;
point() : x(), y() { }
point(T const & x, T const & y) : x(x), y(y) { }
};
template <class T>
std::ostream & operator <<(std::ostream & o, point<T> const & point)
{
o << "{ " << point.x << ", " << point.y << " }";
return o;
}
class int_10_100_t
{
private:
int m_i;
public:
int_10_100_t(int const i = 0) : m_i(std::max(std::min(i, 100), 10)) { }
int i() const { return m_i; }
};
std::ostream & operator <<(std::ostream & o, int_10_100_t const i)
{
o << i.i();
return o;
}
int main()
{
point<int_10_100_t> p;
std::cout << p << std::endl; // { 10, 10 }
p.y = 500;
std::cout << p << std::endl; // { 10, 100 }
return 0;
} |