Search code examples
c++boostboost-filesystem

Comparison operators for directory_entry are missing


Consider the following program:

#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;
}

This fails to compile (Visual Studio 2005, Windows XP SP3) with 17 variations of this error:

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'

According to the documentation (I am still using Boost 1.45), there are comparison operators defined for directory_entry, but neither me nor the compiler can find them (I checked the headers manually). Am I overlooking something? Could it be that I made a mistake when building boost, maybe by setting some option that disables these operators? Is the documentation wrong? Can anyone explain?


Solution

  • Ok, apparently this is only supported in the new Version of the library. Defining BOOST_FILESYSTEM_VERSION as 3 at the start of the program fixed the problem.