c++ accepts:
if(int a=1)
{
//...
}
For learning purposes, I have written a simple lock mechanism class:
class SimpleLock
{
public:
class Token
{
public:
friend class SimpleLock;
Token(SimpleLock & lock) : lock(lock), locked(!lock.locked.exchange(true)) { }
~Token() { if(locked) lock.locked.store(false); }
operator bool() const { return locked; }
private:
SimpleLock & lock;
const bool locked;
};
SimpleLock() : locked(false) { }
private:
std::atomic_bool locked;
};
allowing me to do:
SimpleLock::Token t(lock);
if(t) //Token has an operator bool() overload
{
//...
}
Why doesn't the following compile?
if(SimpleLock::Token t(lock))
{
//...
}
Compiler error:
expected primary-expression before 't'
Online code link : http://goo.gl/Knrmw7