#include <vector>
#include <iostream>

using namespace std;

template <typename T>
struct has_const_iterator {
    typedef char yes[1];
    typedef char no[2];
 
    template <typename C> static yes& test(typename C::const_iterator*);
    template <typename> static no& test(...);

    static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};

template <bool> class bool2class {};

template <class T>
void set_inner(const std::string &path, T & var, bool2class<false> *) {
	cout << "Not STL" << endl;
}

template <class T>
void set_inner(const std::string &path, T & var, bool2class<true> *) {
	cout << "STL" << endl;
}

template <class T>
void set(const std::string &path, T &var) {
	set_inner(path, var, (bool2class<has_const_iterator<T>::value>*)0);
}

int main() {
	char a[4];
	vector<char> b;
	set("a:", a);
	set("b: ", b);
}