Операторы сравнения для directory_entry отсутствуют - PullRequest
3 голосов
/ 10 марта 2011

Рассмотрим следующую программу:

#include <iostream>
#include "boost/filesystem.hpp"

int main()
{
    boost::filesystem::directory_entry d("test.txt");
    boost::filesystem::directory_entry e("test.txt");

    if (d == e) { // <---- error C2784
        std::cout << "equal" << std::endl;
    }

    return 0;
}

Не удается скомпилировать (Visual Studio 2005, Windows XP SP3) с 17 вариантами этой ошибки:

error C2784: 'bool std::operator ==(const std::stack<_Ty,_Container> &,
                                    const std::stack<_Ty,_Container> &)' : 
              could not deduce template argument for 
              'const std::stack<_Ty,_Container> &' from 
              'boost::filesystem::directory_entry'

Согласно документации (я все еще использую Boost 1.45), для directory_entry определены операторы сравнения, но ни я, ни компилятор не могут их найти (я проверял заголовки вручную). Я что-то пропускаю? Может быть, я допустил ошибку при создании boost, возможно, установив какой-то параметр, который отключает эти операторы? Документация неверна? Кто-нибудь может объяснить?

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Хорошо, по-видимому, это поддерживается только в новой версии библиотеки. Определение BOOST_FILESYSTEM_VERSION как 3 в начале программы решило проблему.

0 голосов
/ 10 марта 2011

Если вам не удалось найти оператора в заголовочном файле, то, возможно, у вас другая версия библиотеки? В Boost 1.45 оператор находится в operations.hpp .

...