// A class with a private assignment operator. // This is rare, but sometimes used with singletons and // objects that have complicated state. %module private_assign %{ #include %} %inline %{ class Foo { private: Foo &operator=(const Foo &f) { return *this; } public: Foo() { } Foo(const Foo &f) { } // copy ctor can still be public, however. void bar() { } }; Foo blah() { return Foo(); } class Bar : protected Foo { }; %} #pragma SWIG nowarn=SWIGWARN_IGNORE_OPERATOR_NEW // operator new %inline %{ class TROOT { protected: void *operator new(size_t l) { return malloc(sizeof(TROOT)); } int prot_meth() { return 1; } public: TROOT() { } TROOT(const char *name, const char *title, void *initfunc = 0) { } }; class A : protected TROOT { }; %} %inline %{ Foo foo_global; Foo foo_global_array[1]; Foo foo_global_array_2d[2][2]; struct FooBar : Foo { }; FooBar bar; FooBar bar_array[1]; FooBar bar_array_2d[2][2]; %} // https://sourceforge.net/p/swig/bugs/1006/ %rename(Assign) TwoIsAssignableCopyable::operator=; %inline %{ struct nocopy { nocopy() {} private: nocopy(const nocopy&); nocopy& operator=(const nocopy&); }; struct One: public nocopy {}; struct TwoNotAssignableCopyable: public One {}; struct TwoIsAssignableCopyable: public One { TwoIsAssignableCopyable() {} TwoIsAssignableCopyable(const TwoIsAssignableCopyable&) {} TwoIsAssignableCopyable& operator=(const TwoIsAssignableCopyable&) { return *this; } }; struct Three { TwoNotAssignableCopyable TwoNot; // getter only should be generated TwoIsAssignableCopyable TwoIs; // setter and getter should be generated }; %}