STLFilt изначально задумывался как учебное пособие, позволяющее учащимся проходить семинары по C ++ и / или STL, чтобы разобраться в типично перегруженных сообщениях об ошибках STL.Сегодня, однако, даже некоторые эксперты C ++ приняли STLFilt для использования в повседневной разработке.Результаты могут не всегда быть идеальными, но большую часть времени информация, потерянная во время расшифровки, не является критичной для отлаживаемого приложения.В остальное время расшифровку достаточно легко обойти.
Дистрибутив для каждой платформы (набор компиляторов / библиотек) является автономным и настроен на особенности этой платформы.Каждый сценарий Perl выполняет базовые замены регулярных выражений для всех стандартных (и расширенных, если они присутствуют в библиотеке) компонентов STL, в то время как определенные версии сценария идут дальше в отношении упорядочения сообщений, переноса строк, обработки ошибок заголовка библиотеки и т. Д., А такжеЯ в одностороннем порядке считаю подходящим для этой платформы.
Исходная программа:
#include <map>
#include <algorithm>
#include <cmath>
const int values[] = { 1,2,3,4,5 };
const int NVALS = sizeof values / sizeof (int);
int main()
{
using namespace std;
typedef map<int, double> valmap;
valmap m;
for (int i = 0; i < NVALS; i++)
m.insert(make_pair(values[i], pow(values[i], .5)));
valmap::iterator it = 100; // error
valmap::iterator it2(100); // error
m.insert(1,2); // error
return 0;
}
Во-первых, нефильтрованный запуск с использованием компилятора MinGW gcc 3.2:
d:\src\cl\demo>c++2 rtmap.cpp
rtmap.cpp: In function `int main()':
rtmap.cpp:19: invalid conversion from `int' to `
std::_Rb_tree_node<std::pair<const int, double> >*'
rtmap.cpp:19: initializing argument 1 of `std::_Rb_tree_iterator<_Val, _Ref,
_Ptr>::_Rb_tree_iterator(std::_Rb_tree_node<_Val>*) [with _Val =
std::pair<const int, double>, _Ref = std::pair<const int, double>&, _Ptr =
std::pair<const int, double>*]'
rtmap.cpp:20: invalid conversion from `int' to `
std::_Rb_tree_node<std::pair<const int, double> >*'
rtmap.cpp:20: initializing argument 1 of `std::_Rb_tree_iterator<_Val, _Ref,
_Ptr>::_Rb_tree_iterator(std::_Rb_tree_node<_Val>*) [with _Val =
std::pair<const int, double>, _Ref = std::pair<const int, double>&, _Ptr =
std::pair<const int, double>*]'
E:/GCC3/include/c++/3.2/bits/stl_tree.h: In member function `void
std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::insert_unique(_II,
_II) [with _InputIterator = int, _Key = int, _Val = std::pair<const int,
double>, _KeyOfValue = std::_Select1st<std::pair<const int, double> >,
_Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int,
double> >]':
E:/GCC3/include/c++/3.2/bits/stl_map.h:272: instantiated from `void std::map<_
Key, _Tp, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _Input
Iterator = int, _Key = int, _Tp = double, _Compare = std::less<int>, _Alloc = st
d::allocator<std::pair<const int, double> >]'
rtmap.cpp:21: instantiated from here
E:/GCC3/include/c++/3.2/bits/stl_tree.h:1161: invalid type argument of `unary *
'
И отфильтрованный запуск с использованием прокси-сервера, специфичного для gcc c ++:
d:\src\cl\demo>c++ rtmap.cpp
*** {BD Software Proxy c++ for gcc v3.01} STL Message Decryption is ON! ***
rtmap.cpp: In function `int main()':
rtmap.cpp:19: invalid conversion from `int' to `iter'
rtmap.cpp:19: initializing argument 1 of `iter(iter)'
rtmap.cpp:20: invalid conversion from `int' to `iter'
rtmap.cpp:20: initializing argument 1 of `iter(iter)'
stl_tree.h: In member function `void map<int,double>::insert_unique(_II, _II)':
[STL Decryptor: Suppressed 1 more STL standard header message]
rtmap.cpp:21: instantiated from here
stl_tree.h:1161: invalid type argument of `unary *'
STL Decryptor reminder:
Use the /hdr:L option to see all suppressed standard lib headers
[Примечание: демонстрационные прогоны были выполнены в окне консоли с 80 столбцами с включенным интеллектуальным переносом строк в STLFilt и с внутренними переключателями, настроенными на получение сообщений как можно более краткими.Более подробную информацию можно получить, настроив параметры Decryptor.]