Understanding exceptions in a constructor (by the conversion C-string to long example)
From the c++ specification's point of view a constructor is allowed to throw an exception (in opposite to destructor). So your code is fine.

On the other hand I don't see any advantage why it should be validated directly in the constructor. You could do it in is_valid method as well. Furthermore, if you moved the valifation code out from the constructor to a private method, you would gain an easy way to keep responsibility of handling low-level exceptions inside you class.
So, although your code is valid semantically, its design needs some improvement.

I hope I helped:)