Opened 7 years ago
Last modified 7 years ago
#11876 new Bugs
Boost.Graph conflicts with Qt's foreach macro
| Reported by: | Owned by: | Jeremiah Willcock | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | graph |
| Version: | Boost 1.54.0 | Severity: | Problem |
| Keywords: | Graph BGL Qt | Cc: |
Description
This is a similar problem as https://svn.boost.org/trac/boost/ticket/6455, where the Qt foreach macro conflicts with the boost::foreach::tag in file /usr/include/boost/foreach.hpp.
This is a simple Qt example that reproduces the error (also supplied as an attachment):
#include <boost/graph/adjacency_list.hpp>
#include <QCoreApplication>
#include <fstream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::ofstream f("filename.dot");
boost::write_graphviz(
f,
boost::adjacency_list<>()
);
return a.exec();
}
For the following Qt Creator project file:
QT += core QT -= gui CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp
The error given is:
In file included from /usr/include/boost/graph/graphviz.hpp:35:0,
from ../CppBoostGraphAndQtConflictQtConsole/main.cpp:5:
/usr/include/boost/foreach.hpp:169:42: error: 'boost::Q_FOREACH::tag' has not been declared
boost_foreach_is_lightweight_proxy(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; }
The error does not occur if 'boost/graph/adjacency_list.hpp' is #included either before QCoreApplication or after. This is a workaround.
I cannot see if this error is still present in later versions of Boost. If it is still present, I hope I have contributed in letting Boost.Graph and Qt work together seamlessly.
Attachments (1)
Change History (2)
by , 7 years ago
| Attachment: | CppBoostGraphAndQtConflictQtConsole.zip added |
|---|
comment:1 by , 7 years ago
| Component: | None → graph |
|---|---|
| Owner: | set to |

Qt Creator project that reproduces the compile error