Question: <https://colab.research.google.com/notebooks/io.ipynb#scrollTo=KHeruhacFpSU>

In this notebook help it explains how to upload a file to drive and then download to Colaboratory but my files are already in drive.

Where can I find the file ID ?

```
# Download the file we just uploaded.
#
# Replace the assignment below with your file ID
# to download a different file.
#
# A file ID looks like: 1uBtlaggVyWshwcyP6kEI-y_W3P8D26sz
file_id = 'target_file_id'

```

Answer: 
If the parameter is definitely unused, `[[maybe_unused]]` is not particularly useful, unnamed parameters and comments work just fine for that.

`[[maybe_unused]]` is mostly useful for things that are *potentially* unused, like in

```
void fun(int i, int j) {
    assert(i < j);
    // j not used here anymore
}

```

This can't be handled with unnamed parameters, but if `NDEBUG` is defined, will produce a warning because `j` is unused.

Similar situations can occur when a parameter is only used for (potentially disabled) logging.
[Baum mit Augen's answer](https://stackoverflow.com/a/49320892/817643) is the definitive and undisputed explanation. I just want to present another example, which doesn't require macros. Specifically, C++17 introduced the `constexpr if` construct. So you may see template code like this (bar the stupid functionality):

```
#include <type_traits>

template<typename T>
auto add_or_double(T t1, T t2) noexcept {
    if constexpr (std::is_same_v<T, int>)
        return t1 + t2;
    else
        return t1 * 2.0;
}

int main(){
    add_or_double(1, 2);
    add_or_double(1.0, 2.0);
}

```

As of writing this, GCC 8.0.1 warns me about `t2` being unused when the else branch is the instantiated one. The attribute is indispensable in a case like this too.