progress using std::conditional with discrete type traints and enhanced tests