Question: I am getting the error when i try to build my app :

`Error executing aapt. Please check aapt is present at /home/faizal/DEV/adt-bundle-linux-x86_64-20140321/sdk/build-tools/android-4.4.2/aapt`

This started after i used the SDK Manager to delete the existing build-tools(19.0.3) and got the latest one(20). The location mentioned in the error(`...sdk/build-tools/android-4.4.2`) did infact exist, but it was removed automatically by the SDK manager when i removed the old build-tools.

Now i just see a `20.0.0` folder in `sdk/build-tools`. If i use SDK Manager to download the `19.0.3` build tools again, it creates a `19.0.3` folder, not `android-4.4.2`.

What's going on? Why is ADT looking for a non existent folder? Where is it specified?

Answer: 
Lvalues represent objects and rvalues represent values (loosely speaking). Binding an rvalue to a non-`const` lvalue reference would allow you to modify the *value* - what exactly does that mean? If you had written `a = 3` in your function, you'd be attempting to modify the value `2` to make it `3`. That just doesn't make sense conceptually. However, `const` lvalue references do not allow modification and only allow you to observe a value, which does make sense.

However, there often are object behind rvalue expressions and it can be useful to modify those objects (such as to steal its resources). This is precisely why the rvalue reference was introduced.
In C++11 you can change it to following to make it always work, regardless what you pass it:

```
int sum (int &&a, int &&b)
{
    return(a + b);
}

```

It will give you a non-const reference to `2` and `5` (i.e. you can modify the values inside the `sum(2, 5)` call though `a` and `b`). This is safe and will not give any weird side effects, even if it had been temporary objects instead of primitives (like `string("foo")`) because the arguments to `sum()` do not have a name. That they don't have a name makes you unable to observe the modification in any way.