Почему я получаю «ошибку: ссылка на ‘align_val_t’ неоднозначна» с компилятором Intel C++ 2022 при использовании std::inplace_merge?

Когда я пытаюсь скомпилировать это с помощью набора инструментов Intel C++ Compiler 2022 для Visual Studio 2022:

#include <algorithm>

int main()
{
    int x = 0;
    std::inplace_merge(&x, &x, &x);
}

Я получил:

VC\Tools\MSVC\14.34.31933\include\xmemory(1429,48): error : reference to 'align_val_t' is ambiguous
                _Pbuf = ::operator new (_Size, align_val_t{alignof(_Ty)}, nothrow);
                                               ^
VC\Tools\MSVC\14.34.31933\include\algorithm(7152,57): note: in instantiation of function template specialization 'std::_Optimistic_temporary_buffer<int>::_Optimistic_temporary_buffer<long long>' requested here
    _Optimistic_temporary_buffer<_Iter_value_t<_BidIt>> _Temp_buf{(_STD min)(_Count1, _Count2)};
                                                        ^
VC\Tools\MSVC\14.34.31933\include\algorithm(7160,10): note: in instantiation of function template specialization 'std::inplace_merge<int *, std::less<>>' requested here
    _STD inplace_merge(_First, _Mid, _Last, less<>{});
         ^
Temp.cpp(6,7): note: in instantiation of function template specialization 'std::inplace_merge<int *>' requested here
        std::inplace_merge(&x, &x, &x);
             ^
VC\14.34.31933\include\vcruntime_new.h(27,16): note: candidate found by name lookup is 'std::align_val_t'
    enum class align_val_t : size_t {};
               ^
note: candidate found by name lookup is 'std::align_val_t'

Я пытался копаться в исходниках STL, но не могу найти, где двусмысленность.

Почему возникает эта ошибка? И как мне это обойти?

Это все, что есть на выходе? Пишет, что правильный std::align_val_t найден, но не говорит, с чем он двусмысленный.

user17732522 23.11.2022 06:24

@ user17732522: Я пропустил 3 строки (есть какое-то запутанное чередование строк, которое я не могу понять, что мне пришлось исправить при вставке), но они относятся только к 1 месту. Я не вижу второго определения, которое было бы неоднозначным... если только оно не определено внутри компилятора или что-то в этом роде? И достаточно забавно, я на самом деле получаю сообщение об ошибке, если делаю #include <memory_resource>int main() { }.

user541686 23.11.2022 06:30

@user17732522: user17732522: На самом деле, я думаю, что все... есть несколько внутренних определений компилятора. И ошибки возникают даже в том случае, если вы ссылаетесь на него без включения каких-либо заголовков!

user541686 23.11.2022 06:33

Что ж, похоже, что-то очень не так. К сожалению, у меня нет установки, чтобы попытаться воспроизвести проблему.

user17732522 23.11.2022 06:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечая на мой собственный вопрос, но, похоже, это ошибка с предварительно скомпилированными заголовками. Это происходит, даже если предварительно скомпилированные заголовочные файлы пусты.

Избегание предварительно скомпилированных заголовков, похоже, позволяет избежать проблемы.

Если у кого-то есть лучший обходной путь или более подробная информация, пожалуйста, опубликуйте его.

Другие вопросы по теме