UB в шаблонной вариадик функции
От: B0FEE664  
Дата: 07.12.22 17:35
Оценка: :)
Если я правильно понимаю, в следующей функции есть неопределённое поведение из-за неопределённого порядка вычисления аргументов функции:
enum class OkFail
{
   Fail,
   Ok
};


template<class T, typename... TNames>
auto GetObjectProps(const T& jsnObject, const TNames&... strName)
{
    const auto itEnd  = jsnObject.end();
    OkFail     result = OkFail::Ok;

    auto fnFind = [&result, &jsnObject, &itEnd](const auto& name)
    {
        const auto it = jsnObject.find(name);

        if ( itEnd == it )
        {
            result = OkFail::Fail;
            out::error() << "decodor: the received message is lacking of the data: " << std::string_view(name.data(), name.size());
        }
        return it;
    };

    return std::make_tuple(result, fnFind(strName)...); // TODO UB here, fix me.
}

Есть элегантный способ это исправить?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.