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

5

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

Невелике доповнення щодо файлу конфігурації clang.
Краще створювати окремо для кожного проєкту окремий файл конфігурації.
Треба просто створити файл .clangd з вашими прапорцями і т.д. та покласти в кореневу теку проєкту.
Бо якщо ви використовуєте, наприклад, clang для С і С++
і при цьому вкажете у загально-системному файлі конфігурації,
який зазвичай знаходиться в домашній теці, CompileFlags: [-std=c++20, -std=c23],
то clang запам'ятає лише останній прапорець
та буде перевіряти ваші С++ проєкти за стандартами мови С 23-го року.

Подякували: leofun011