Код: Выделить всё
template
concept convertible_range =
std::ranges::sized_range && std::convertible_to;
template
struct S {
using value_type = T;
template
void foo(R&&);
};
template
template
void S::foo(R&&) {}
ошибкой C2244: 'S: :foo': невозможно сопоставить определение функции с существующим объявлением
Реальный пример
Похоже, проблема в том, что комбинация определения foo вне класса с использованием псевдонима типа в объявлении foo в S. Если я либо:
- определю функцию на месте:
Код: Выделить всё
struct S {
using value_type = T;
template
void foo(R&&) {}
};
- Измените объявление, чтобы использовать T напрямую:
Код: Выделить всё
template
struct S {
template // Difference is here!
void foo(R&&);
};
template
template
void S::foo(R&&) {}
Это ошибка MSVC?
Подробнее здесь: https://stackoverflow.com/questions/791 ... is-aliased
Мобильная версия