ElevatorPitch/main.cpp (40 lines of code) (raw):

#include <unistd.h> #include <pwd.h> #include <iostream> class User { std::string m_name; enum class Privileges { Unset, Normal, Root }; Privileges m_privileges; Privileges detectPrivileges() { Privileges privileges = Privileges::Normal; if( m_name == "root" ) { privileges = Privileges::Root; } return privileges; } public: User() : m_name( getpwuid( geteuid())->pw_name ), m_privileges( detectPrivileges() ) { if( m_privileges != Privileges::Root && m_privileges != Privileges::Normal ) throw std::domain_error( "Unable to deduce privileges" ); } auto name() const { return m_name; } friend std::ostream& operator<<( std::ostream& os, User const& user ) { os << "user: '" << user.m_name << "'"; if( user.m_privileges == Privileges::Root ) os << " (root user)"; else os << " (non-root user)"; return os; } }; int main() { User user; std::cout << user << "\n"; }