Squeak.ru - шаблоны программирования

Использование объявления ссылается на C, который является базовым классом (псевдонимом) D, но не признается действительным.

Это похоже на проблему в clang (я уже открыл ошибку для clang). ), но я хотел бы быть уверен, что я не делаю ошибку.

Рассмотрим следующий код:

struct B { };

template<typename...>
struct D;

template<typename T, typename U, typename... A>
struct D<T, U, A...>: D<U, A...> {
    using C = D<U, A...>; // (1)
    // using D<U, A...>::D; // (2)
    // using C::C; // (3)
    using C::D; // (4)
};

template<typename T>
struct D<T>: T { using T::T; };

int main() {
    D<int, double, B> d{};
}

Строки (2) (если закомментировать (1) и (4)) и (3) (если закомментировать (4)) работают как положено, а (1) (пример выше как есть) дает следующие ошибки:

11 : ошибка: зависимое использование объявления разрешено для ввода без 'typename'
с использованием C::D;

[...]

11 : ошибка: использование объявления ссылается на 'C::', который не является базовым классом 'D'
using C::D;

Так или иначе, C является псевдонимом D<U, A...>, то есть базовым классом D<T, U, A...>.
Насколько мне известно, этот фрагмент должен компилироваться. Я ошибаюсь?

Обратите внимание, что GCC компилирует его по крайней мере с v4.8.1 до v6.1.


  • wg21.link/CWG2070 01.06.2016
  • Итак, это проблема, решение которой еще не является частью стандарта, верно? Он упоминает об этом только как обсуждаемый. 01.06.2016

Ответы:


1

Как упоминалось в тикете на clang, это нельзя считать ошибкой (возможно):

Clang следует направлению основной проблемы 2070 (http://wg21.link/cwg2070), что соответствует намерению исходного предложения (см. конец «Схемы решения» на странице http://wg21.link/n2540). ). Таким образом, это работает, как задумано. Чтобы наследовать конструктор, вам нужно использовать один и тот же идентификатор до и после ::.

05.06.2016
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...