I am sorry, but I can't help to be picky about these things :-) It is not just redundant. The try-catch block does not capture anything from the outside. Quick check:

Without the `auto`:
```
NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE // type of val
O:0x7fff55d2ab70 []
I:0x7fff55d2ab70[block_gmcclkvjim4qr4rn]
A:0x7fff55d2ab70 [block_gmcclkvjim4qr4rn]
notFalseblock_gmcclkvjim4qr4rn 1

NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
O:0x7fff55d2ab70 []
I:0x7fff55d2ab70[block_7emt0en6tchfm1i2]
A:0x7fff55d2ab70 [block_7emt0en6tchfm1i2]

ERROR: id is not false!
WARNING: id is not false!
```

Same thing, except now with `auto val`, thus shadowing the outer val:

```
NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
O:0x7fff58fb4d28 []
I:0x7fff58fb4d00[block_2udobklfpg03lmn8]
A:0x7fff58fb4d28 []
notFalse 0

NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
O:0x7fff58fb4d28 []
I:0x7fff58fb4d00[block_7oqdchj0e40t6r1g]
A:0x7fff58fb4d28 []

ERROR: id is false!
WARNING: id is not false!
```
I see two distinct pointers that differ by 40 bytes for the two `val`s. (;
Anyway, I happy it is fixed now.


`O:` is the address [value] of `val` before try, `I:` inside try and `A:` after the try-catch block.
```c++
            std::cerr << std::endl << typeid(val).name() << std::endl;
            std::cerr << "O:" << &val << " [" << val << "]" << std::endl;

            // execute getter call & check for error
            try {
                val = (parent->*get)();
                std::cerr << "I:" << &val << "[" << val << "]" << std::endl;
            } catch (exception e) {
                errOccured = true;
                errMsg = e.what();
            }
            std::cerr << "A:" << &val << " [" << val << "]" << std::endl;
```