When I try to compile the following program, the compiler gives error: 'sqrtl' is not a member of 'std'.
#include <cmath>
#include <iostream>
int main(){
std::cout << std::sqrtl(5.0) << "\n";
return 0;
}
I wanted to know why this happens, so I started experimenting.
When I remove std:: in front of sqrtl the program compiles and runs fine. When I additionally remove #include <cmath>, the compiler gives error: 'sqrtl' was not declared in this scope.
At this point I am really confused. There clearly has to be a function sqrtl in cmath, but it is not a member of std?
When I replace sqrtl with sqrt in the original program, the program compiles and runs fine. Same thing when I remove std:: in front of sqrt. When I additionally remove #include <cmath>, the compiler gives error: 'sqrt' was not declared in this scope.
Finally, I did the same test with sqrtf. The same thing happened as with sqrtl.
Another thing I find weird is that removing std:: lets the program compile in the first place. Especially with sqrt which must be a member of std or the compiler would have given the same error as sqrtl and sqrtf. This is especially confusing since removing std:: in front of cout makes the compiler give me error: 'cout' was not declared in this scope.
Can anyone explain why sqrtl, sqrt and sqrtf behave so strangely? Is sqrt even a member of std? How could I find out whether a certain method is a member of std or not?
I know removing std:: is an easy fix, but for consistency purposes I like to have std:: in front of all std members in my personal library.