online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby, C#, OCaml, VB, Perl, Swift, Prolog, Javascript, Pascal, COBOL, HTML, CSS, JS Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <stdio.h> #include <iostream> template <class Stub> struct member { static typename Stub::type value; }; // статик переменная для общего шаблона template <class Stub> typename Stub::type member<Stub>::value; // подмена типа и получение адреса приватной переменной // stub уйдет дальше в класс member, чтобы имять статик переменную для этого типа template <class Stub, typename Stub::type x> struct private_member { private_member() { member<Stub>::value = x; } // сохранение адреса переменной static private_member instance; }; template <class Stub, typename Stub::type x> private_member<Stub, x> private_member<Stub, x>::instance; // тесткейс struct PapaPavlica { private: char const* papini_dengi = "papini dengi"; }; // подменный тип, чтобы компилятор не пугался нарушением прав доступа struct A_x { typedef char const *(PapaPavlica::*type); }; // магия, здесь живут драконы template struct private_member<A_x, &PapaPavlica::papini_dengi>; int main() { PapaPavlica papa; std::cout << papa.*member<A_x>::value << std::endl; // papini_dengi // разворачиваем обратно полученный адрес в переменную // получаем *(papa).(&PapaPavlica::papini_dengi) = "deneg net" papa.*member<A_x>::value = "deneg net"; std::cout << papa.*member<A_x>::value << std::endl; // deneg net }
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby, C#, OCaml, VB, Perl, Swift, Prolog, Javascript, Pascal, COBOL, HTML, CSS, JS Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <stdio.h> #include <iostream> template <class Stub> struct member { static typename Stub::type value; }; // статик переменная для общего шаблона template <class Stub> typename Stub::type member<Stub>::value; // подмена типа и получение адреса приватной переменной // stub уйдет дальше в класс member, чтобы имять статик переменную для этого типа template <class Stub, typename Stub::type x> struct private_member { private_member() { member<Stub>::value = x; } // сохранение адреса переменной static private_member instance; }; template <class Stub, typename Stub::type x> private_member<Stub, x> private_member<Stub, x>::instance; // тесткейс struct PapaPavlica { private: char const* papini_dengi = "papini dengi"; }; // подменный тип, чтобы компилятор не пугался нарушением прав доступа struct A_x { typedef char const *(PapaPavlica::*type); }; // магия, здесь живут драконы template struct private_member<A_x, &PapaPavlica::papini_dengi>; int main() { PapaPavlica papa; std::cout << papa.*member<A_x>::value << std::endl; // papini_dengi // разворачиваем обратно полученный адрес в переменную // получаем *(papa).(&PapaPavlica::papini_dengi) = "deneg net" papa.*member<A_x>::value = "deneg net"; std::cout << papa.*member<A_x>::value << std::endl; // deneg net }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue