I use the "other" technique when it's necessary for the user to be able to mix in their own:
enum WidgetFlavor
{
Vanilla,
Chocolate,
Strawberry,
Other=10000,
};
Now users can add their own (and are also responsible for making sure it works in all APIs): enum CustomWidgetFlavor
{
RockyRoad=Other,
GroovyGrape,
Cola,
};
And now you can amend the enum without breaking the client: enum WidgetFlavor
{
Vanilla,
Chocolate,
Strawberry,
Mint,
Other=10000,
};