KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I tried to find a solution for the problem of the question C++ template non-type parameter type deduction , which does not involve a template parameter to call f, but implicitly chooses the correct type for the template parameter. Since constexpr should guarantee that a function only contains compile time constants, and is evaluated at compile time (at least thats what i think it does), i thought it might be the solution for this issue. So i came up with this: template <class T, T VALUE> void f() {} //first i tried this: template <class T> auto get_f(T t) -> decltype( &f<T,t> ) { return f<T,t>; } //second try: template <class T> constexpr void (&get_f( T t ))() { return f<T,t>; } int main() { get_f(10)(); //gets correct f and calls it } first version generates following error: error: use of parameter 't' outside function body which is really confusing, since the usage of parameters in the decltype statement of a trailing return type should be ok? second version generates following error: error: invalid initialization of non-const reference of type 'void (&)()' from an rvalue of type '<unresolved overloaded function type>' which is kinda confusing, since i fully qualified f in get_f . I would expect this kind of error messages if i did not have the constexpr . So do i have a false understanding of what constexpr does, or is the C++0x implementation of GCC flawed for this case ? I am using GCC 4.6.2
Tags (comma-separated)
Save Edits
Cancel