I am getting an error qualified-id in declaration before ‘<’ token from the following code:
// g -std=c 20 example.cpp
#include <iostream>
template <typename U = int>
struct Example {
template <typename T>
static void execute() {
std::cout << "Hey" << std::endl;
}
};
int main() {
Example::execute<float>();
}
When I include the type for Example, such as Example<int>::execute<float>() it compiles successfully. Shouldn't the compiler be able to deduce the type since I specified it as default value?
CodePudding user response:
Class template argument deduction only applies when creating objects.
That is Example e; will deduce Example<int> e; via the default argument.
You are not creating an object though, and Example is not a class. You must include a template argument list. In this case, it can be empty though, since the template argument includes a default:
Example<>::execute<float>();
