在 GCC 和 Clang 上編譯的一些代碼遇到問題,但不是 MSVC (VS2022)。似乎與此類似,但那是幾年前的事了,這個問題是專門由derived_from_specialization_of方法模板中的使用引起的,所以我不確定它是否是同一個問題。
我想知道這是什么原因,以及問題出在我的代碼還是 MSVC 上。
演示
例子:
#include <concepts>
template <template <class...> class Template, class... Args>
void derived_from_specialization_impl(const Template<Args...>&);
template <class T, template <class...> class Template>
concept derived_from_specialization_of = requires(const T& t) {
derived_from_specialization_impl<Template>(t);
};
template <class T>
class A
{
public:
A() = default;
};
template <derived_from_specialization_of<A> T>
class B;
template <derived_from_specialization_of<B> T>
class C
{
public:
C() = default;
};
template <derived_from_specialization_of<A> T>
class B
{
public:
B() = default;
template <derived_from_specialization_of<B> U>
C<U> Foo();
template <derived_from_specialization_of<B> U>
C<U> Bar()
{
return C<U>();
}
};
template <derived_from_specialization_of<A> T>
template <derived_from_specialization_of<B> U>
C<U> B<T>::Foo()
{
return C<U>();
}
uj5u.com熱心網友回復:
這是什么原因,如果問題出在我的代碼或 MSVC 上。
這似乎是 MSVC 中的一個錯誤。您已經正確地為成員函式 template提供了類外定義Foo<>。
使用auto和尾隨回傳型別似乎并不能解決 msvc 中的問題。您可以為此提交錯誤報告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486495.html
上一篇:模板的默認引數不起作用
