Как сказано ниже, лучше, чем иметь first / second в качестве открытых членов. Я считаю, что это почти так же плохо. Если вы даете возможность получить доступ к частной переменной вне класса, в чем тогда смысл? Разве функции не должны быть
T First(); void(or T) First(const T&)
Пример:
// Example 17-3(b): Proper encapsulation, initially with inline accessors. Later
// in life, these might grow into nontrivial functions if needed; if not, then not.
//
template<class T, class U>
class Couple {
Couple() : deleted_(false) { }
T& First() { return first_; }
U& Second() { return second_; }
void MarkDeleted() { deleted_ = true; }
bool IsDeleted() { return deleted_; }
private:
T first_;
U second_;
bool deleted_;
};