1

Тема: Використання бібліотеки <ranges>

Коли я захотів використати бібліотеку <ranges>,
clang спочатку взагалі її не бачив, не було навіть автодоповнення.
Я додав до файлу конфігурацій clang
CompileFlags:
  Add: [-std=c++20].

З'явилося автодоповнення, але досі є помилка no member named 'ranges' in namespace 'std' [clang-diagnostic-error].
Хоча все компілюється і програма працює як слід.
Як мені виправити це?
У мене clang version 19.1.7 і gcc (GCC) 14.2.1 20250207.
Компілюю gcc, а clang для автодоповнення, діагностики та форматування.

2

Re: Використання бібліотеки <ranges>

Треба було в налаштуваннях Emacs дещо змінити. Тепер усе працює як слід.

3

Re: Використання бібліотеки <ranges>

Отже, виявляється, ви працюєте в Emacs. Як гадаєте, це суттєва інформація, щоб вам підказали, що робити?
Ну і люди, окрім того, щоб питати, ще й в гуглі шукають. І комусь може бути корисним дізнатися, що саме треба налаштувати в Emacs для clang, щоб бібліотека ranges використовувалася без помилок. Чому б вам для них не написати, що саме ви змінили в налаштуваннях?

4 Востаннє редагувалося Teg Miles (22.03.2025 11:11:01)

Re: Використання бібліотеки <ranges>

koala написав:

Отже, виявляється, ви працюєте в Emacs. Як гадаєте, це суттєва інформація, щоб вам підказали, що робити?
Ну і люди, окрім того, щоб питати, ще й в гуглі шукають. І комусь може бути корисним дізнатися, що саме треба налаштувати в Emacs для clang, щоб бібліотека ranges використовувалася без помилок. Чому б вам для них не написати, що саме ви змінили в налаштуваннях?

У мене діагностика в Emacs відбувається за допомогою lsp-mode i flycheck.
Я грався з налаштуваннями і вимкнув flycheck в lsp-mode ось такою командою lsp-diagnostics-provider :none.
Тому lsp-mode використав свій lsp сервер clangd зі своїми налаштуваннями.
У нього стандартне налаштування с++17, а <ranges> з с++20.
І оскільки lsp-mode вже не бачив моїх налаштувань, то видавав помилку.
Загалом, якщо не втручатися в налаштування,
то lsp-mode автоматично шукає flycheck і якщо знаходить, то використовує його для діагностики.
У свою чергу flycheck визначає всі наявні у вас чекери та проганяє їх один за одним крізь ваш код.

Подякували: koala, leofun012