
On 4 September 2011 00:14, Mostafa <mostafa_working_away@yahoo.com> wrote:
That seems to be the consensus so far. Assuming that I'm creating optional2, so we don't have to worry about existing code, and that it's equivalent to optional in all respects except that the assignment operator has now been disallowed across the board, and we've only retained a no-argument reset method. What are the implications of that?
The same problem that references and const variables have; namely, any class that has them as members is non-Assignable (both non-CopyAssignable and non-MoveAssignable). It's the reason I never have const member variables, and either use pointers, boost::optional or boost::reference_wrapper instead of C++ references as members. Not being useful as member variables is a severe limitation. And while I do occasionally have classes that are not Copyable, I can't think of any of those that I don't want to make Moveable in the near future. It isn't that vector<optional2<T>> doesn't work; it's that vector<anytypethathasoptional2asamember> doesn't work. This is a non-starter for many people. That leaves using your class for local variables or parameters, and I don't see much usefulness there either, as a pointer is a far easier construct to use for such a localized effect. Classes that are CopyConstructible or MoveConstructible but not Assignable are very rare and unexpected. -- Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404