This error is pissing me right the fuck off.
Code:
main.cpp:307: error: no matching function for call to ‘layer::debug::Library::findFunction(const char [19])’
main.cpp
layer::debug::Library sqlite("/usr/lib/libsqlite3.so");
const char* (*whatwhat)() = sqlite.findFunction<const char*, void>("sqlite3_libversion"); // line 307
const char* ver3 = whatwhat();
::layer::info("blah says \"%s\"\n", ver3); // printf-equiv
Library is defined as
class Library
{
public:
Library(const GString& path); // GString is typedef'd std::string
~Library();
void* findFunction(const GString& functionName) const;
template<typename R, typename... T>
R (*findFunction(const GString& funcName))(T... Ts) const
{
return (R (*)(...))findFunction(funcName);
}
private:
void* _libraryHandle;
};
Compiling with -std=c++0x -pedantic -Wall
Edited:
if I use the non-templated function and some bullshit casting, it works fine.
void* simple = sqlite.findFunction("sqlite3_libversion");
const char* (*simpleimpl)(void) = (const char* (*)(void))(simple);
::layer::info("blah says \"%s\"\n", simpleimpl());