#include <iostream>

template <typename T>
class Number
{
    T val;
    template<typename U>
    friend std::ostream& operator<< (std::ostream& os, const Number<U>& num);
public:
    Number() : val(T{}) { }
    Number(T value) : val{ value } { }
};

template <typename T>
std::ostream& operator<< (std::ostream& os, const Number<T>& num)
{
    os << num.val;
    return os;
}

int main()
try
{
    Number<int> a;
    a = 10;
    std::cout << a;
    return 0;
}
catch (std::exception& e)
{
    std::cout << e.what();
    return 1;
}
catch (...)
{
    std::cout << "Unknown error";
    return 2;
}
