У вас есть SSCCE, который мы можем запустить для наблюдения за поведением? Это сэкономит много времени
Я только что сделал это: Просто сделал это: repro Повышение 1.60 на MSVC
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/depth_first_search.hpp>
#include <iostream>
struct DfsVisitor : public boost::default_dfs_visitor {
template <class Graph> void finish_edge(typename Graph::edge_descriptor ed, const Graph &g) {
std::cout << "Finish edge " << boost::source(ed, g) << "->" << boost::target(ed, g) << std::endl;
}
};
int main() {
boost::adjacency_list<> g(4);
add_edge(0,1,g);
add_edge(1,2,g);
add_edge(2,3,g);
DfsVisitor dfs;
boost::depth_first_search(g, boost::visitor(dfs));
std::cout << "Done\n";
}
Просто печатает:
Done
Для сравнения
Так что, очевидно, это больше связано с буст-версией, чем с компилятором. Godbolt не идет дальше, чем Boost 1.64 (все еще в порядке: https://godbolt.org/z/Ld8-8d), но wandbox делает:
Проверка замечаний к выпуску для Boost 1.62.0 , кажется, не упоминает что-то, но использование истории github действительно раскрывает:
$ git clone https://github.com/boostorg/graph
$ cd graph
$ git log --oneline --graph --left-right --cherry-pick boost-1.61.0...boost-1.62.0 | grep -i finish
> a14f8df8 Fixed bug 10231 partly: If finish_edge was called, then now correctly. (#16)
> d6b7a717 Add finish_edge test case from Alex Lauser.
> 6a2d45ae Condition TTI finish_edge on supported compilers.
> 0e1414f4 Fix type traits so finish_edge is called when defined.