If the user or another library have a variable/function/macro/whatever, named OPTION1, in most cases there will be an error. For example if the user declare a variable int OPTION1 = 123; after including your library, then that name will be replaced by the content of your macro, it will become int options::O1 = 123; which is not good
But if you use
class Library {
public :
enum options {
OPTION1, OPTION2, OPTION3
};
...
}
...
Library go(1000, 8, Library::OPTION1);
It will compile