The following code is fine on GCC and Clang, but fails on MSVC and ICC.
#include <boost/mpl/vector.hpp>
#include <boost/mpl/push_back.hpp>
struct X;
using vec = boost::mpl::vector<X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X>;
using test = boost::mpl::push_back<vec, X>::type;
https://godbolt.org/z/w-yTto
This inconsistency confuses people: 1) https://stackoverflow.com/questions/55900932/issue-with-x3-and-ms-vs2017 2) boostorg/spirit#515