Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22055

Problem in GCC/C++17 with template template class

$
0
0

Consider the 2 following overloads

template<typename T>
bool test() {
    return true;
}

template<template<typename ...> class T>
bool test() {
    return false;
}

The 1st one works for regular classes, while the 2nd one works for templates that are not instantiated. For instance:

    std::cout<<test<int>()<<std::endl; <-- this yields 1
    std::cout<<test<std::list>()<<std::endl; <--this yields 0

Now consider the following template function:

template<typename U>
bool templfun(){
    struct A{
        bool f(){
            return test<A>(); // <-- this gives an error
        }
    };
    return test<A>();  // <-- this is ok
}

In GCC it gives an error for ambiguous overload resolution, while Clang compiles. Interestingly, the second call to test() doesn't produce errors (even in GCC). Moreover, if I remove the template<typename U> thing on top of templfun, gcc stops complaining.

Is this a bug with GCC or is it illegal code?


Viewing all articles
Browse latest Browse all 22055

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>