А смысл его валидировать? Вот будет ваша программа принимать только 4 десятичных числа от 0 до 255 разделённых точкой, в то время как большая часть софта нормально переваривает и восьмеричные с шестнадцетеричными числами. И даже 0x7f000001 признаётся нормальным адресом. Всё эти программы пользуются функцией inet_aton, реализованной в каждой ОС. Но это чистый Си, не С++.