A void bind<T>(statement&, std::size_t, const T&) family of functions was introduced to allow the user of the library to add support for his types. Unfortunately it has bad impact on the simplicity of use of the library, especially the exec family of function.

If user passes argument of invalid type to exec, then compiler doesn't give the point of its invocation in the error description, but the point of trap bind function.

template <class T> inline void bind(statement& statement, std::size_t index, const T& value) {
	static_assert("Requested type T is invalid.", false);
}

The user then must find manually the source of problem which is tedious and not obvious (clicking through all that layers between exec and bind). As it seems not to be possible to detect by metaprogramming if the given type has corresponding bind function, the author decided to limit support only to fundamental types, std::string and const char*. Then the arguments passed to exec can be validated earlier with appropriate metafunction.

Similar argumentation follows for the column family of functions.

Additionally:
+renames namespace sqlite3 and sqlite3cpp to sqlt3
+adds static_assert in execf