The syntax for calling a pointer to member function is rather atrocious. Here's the correct syntax:
if ((targets[0]->*(targets[0]->OnFire))() == true)
That is downright ugly. This is why the Parashift C++ FAQ page on calling pointers to member functions recommends defining a macro for this purpose -- and note that the author of those pages dislikes macros.
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
...
if (CALL_MEMBER_FN(*targets[0],targets[0]->OnFire)() == true)
Either use a macro or use a std::function
as described in sehe's answer.