Some methods are inaccessible even if they are declared in the library's header. The most common cases:
A template method can use a method of a template type that may not be present, e.g. QVector<T>::contains will not compile if T does not have operator==.
Template partial specialization can remove any methods for any template type, e.g. QFuture<void>::result is removed.
A method can simply be left without implementation. Any attempt to use it will only fail on link stage with "undefined reference" error. In Qt, it's qt_check_for_QGADGET_macro method that is used only for template magic but has no implementation.
Currently the only way to fix it is to add all wrong methods to the blacklist in the lib spec. This is a very inconvenient way if there are a lot of methods.
Solution:
Implement preliminary generation of small C++ projects for each method.
Try to compile the projects and remove methods that don't compile.
Add a lib spec field for a reference method that should always be available. This method will be tested before all others to check if the toolchain and environment are set up correctly for compiling.
Drop the complicated code responsible for eliminating methods in favor of just testing if they compile. This may include complicated inheritance exceptions and abstract class constructors.
Template methods are currently not supported because they induce too many template instantiation errors. Automatic detection would allow to enable them.
Some methods are inaccessible even if they are declared in the library's header. The most common cases:
QVector<T>::contains
will not compile ifT
does not haveoperator==
.QFuture<void>::result
is removed.qt_check_for_QGADGET_macro
method that is used only for template magic but has no implementation.Currently the only way to fix it is to add all wrong methods to the blacklist in the lib spec. This is a very inconvenient way if there are a lot of methods.
Solution:
Template methods are currently not supported because they induce too many template instantiation errors. Automatic detection would allow to enable them.