The STL library writers got there before you.
There is already a template function call min in the std namespace.
Choose another name for your function (or keep the name and create your own namespace for it).
I'd buy the C++ Committee a round of beers if they took out using.
using declarations or using directives, or both?
For those that don't know the difference:
using Declarations, ie:
1 2 3
using std::cout;
using std::cin;
using std::endl
add names to the scope in which they are declared. The effect of this is:
» a compilation error occurs if the same name is declared elsewhere in the same scope;
» if the same name is declared in an enclosing scope, the the name in the namespace hides it.
The using directive, ie usingnamespace std;, does not add a name to the current scope, it only makes the names accesable from it. This means that:
» If a name is declared within a local scope it hides the name from the namespace;
» a name in a namespace hides the same name from an enclosing scope;
» a compilation error occurs if the same name is made visible from multiple namespaces or a name is made visible that hides a name in the global name space.
Both. using defeats the purpose of organizing types and functions into namespaces. What's the point if the user can just override it if he feels like it?
I must admit, I do hate seeing using directives, especially at global scope. It does negate the namespace concept and pulling everything from the namespace into the current scope is a bad idea.
I have less of a problem with using declarations, especially if their scope is kept restricted. Pulling names out of a namespace into the current scope can be beneficial.
Full scope resolution is desirable for production code.
As with a lot of things, if they are used to generally or without forethought, they can course problems.