   expected template ambiguity
i expected the following code to raise an error because the compiler doesnt know wich func to use, the template or non-template one#include <string>#include <iostream>#include <cstdlib> template<typename T>T func(T arg) { return arg; } std::string func(std::string arg) { return "surprise!"; }  int main(int argc, char **argv) {    std::cout << func(std::string("no surprise please!") );    system("PAUSE");    return 0;}however the code always calls the non-template function. 1.Why is that?2.If that kind of behaviour is part of the standard (calling non-template functions rather than fitting templates), whats the point of the special syntax for template specialization?i.e.template<>std::string func<std::string>(std::string arg) { return "surprise!"; }
  You probably want to read this article.   ;wow that was fast.article explains everything... holy **** thats complicated :Dthanks for helping