Today I took a look at some Online C++ compilers – this would have been very useful when checking portability of some code in my recent post on C++11 Concurrency.
First, here’s LiveWorkspace.org which makes g++ 4.72 and 4.8 available as well as clang 3.2:
Second, Rise4Fun allows you to try Visual Studio:
As anticipated, the Counter class (which contains a mutable member of type int&) compiles under Visual Studio, but doesn’t under clang 3.2 or gcc (which is correct according to the C++ standard). What’s great about LiveWorkspace is how quickly you can switch between compilers to see how they like the same code. For example, the amended code that treats int& as a template parameter compiles under g++ 4.7.2 and 4.8, but doesn’t under clang 3.2:
#include <iostream> template<typename T> class Counter { mutable T m_t; public: Counter(T t) : m_t(t){} void Increment() const { ++m_t; } }; int main() { int count = 0; Counter<int&> counter(count); counter.Increment(); std::cout << count << "\n"; return 0; }