tsa / vu8

vu8 is a system for wrapping C++ classes and functions within javascript modules and classes.
MIT License
41 stars 12 forks source link

More visual studio compiler errors #6

Open nicokruithof opened 12 years ago

nicokruithof commented 12 years ago

The following code compiles fine on linux (gcc), but gives an error on windows (visual studio)

class Test
{
public:
    Test()
    {
        std::cout << "Test()" << std::endl;
    }
    void open(const std::string &filename)
    {
        std::cout << "Opening: " << filename << std::endl;
    }
    void close()
    {
        std::cout << "Closing" << std::endl;
    }
};

...
vu8::Class<Test> renderer_class;
renderer_class
            .Set<void (), &Test::close>("close")
            .Set<void (const std::string&), &Test::open>("open");

The error is:

error C2440: 'specialization' : cannot convert from 'void (__thiscall Test::* )(void)' to 'void (__thiscall Test::* const )(const v8::Arguments &)(void)'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
error C2973: 'vu8::Class<T>::Set' : invalid template argument 'void (__thiscall Test::* )(void)'
with
[
  T=Test
]
vu8/Class.hpp(168) : see declaration of 'vu8::Class<T>::Set'
with
[
   T=Test
]
error C2440: 'specialization' : cannot convert from 'void (__thiscall Test::* )(void)' to 'void (__thiscall Test::* const )(void) const'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
tsa commented 12 years ago

You could attempt to rename the const specialisation and compile again?

I can't test this under Visual Studio at the moment as I have no windows machine.