Intelligent code completion works using an automatically generated in-memory database of classes, variable names, and other constructs that the application being edited defines or references. The "classic" implementation of IntelliSense works by detecting "marker characters" such as periods, or other separator characters, depending on the language. When the user types one of these characters immediately after the name of an entity having one or more accessible members (such as contained variables or functions), IntelliSense suggests matches in a pop-up window. The user can either accept the suggestion by typing a statement completion character ( or )—or a language-specific marker (such as the semicolon for C++), or continue typing the name. Over time, IntelliSense determines which variable or function the user most likely wants.