O_o

Nope.

It invites a scenario in which the programmer doesn't know if a reference to the object he has references a valid object or an object that on construction "returned false" even though such a notion is impossible.

You have multiple options; many of them presenting a better design. (The ones below are certainly better options.)

You can simply rearrange the notion of construction for your object with "two stage" construction. Though I despise this method, it has a place in the real world. Instead of the constructor "returning false", you setup the constructor to initialize the object to a "ready but invalid" state, provide a second function that does the real work of constructor (such as `bool construct(string &)'), and a third function to query the validity of the object.

You completely create your object normally and doing nothing else or completely fail to create the object normally by throwing an exception, and you rearrange the nature of "determine if a string can be made into a list" by moving the implementation of that question into a function. You only need to create a function (such as `list listfromstring(string &, bool &)') which can catch the exception and take other appropriate steps.

Soma