L'exemple suivant compile avec gcc mais pas avec clang. Quel compilateur est le bon, et pourquoi ?
#include <utility>
struct Foo {
private:
template<typename T>
static int f();
public:
template<typename U>
using T = decltype(f<U>());
};
int main () {
static_assert(std::is_same_v<Foo::T<float>, int>);
}
Clang se plaint que 'f' is a private member of 'Foo'
. Je pense que ce n'est pas correct car f
est accessible depuis l'intérieur de Foo
et devrait donc être visible. Il est intéressant de noter que cela fonctionne si T
n'est pas un modèle.
Code en direct aquí .