Skip to content

Commit

Permalink
NVCC + C++17 (#1103)
Browse files Browse the repository at this point in the history
* NVCC + C++17

Work-around a build issue with NVCC in C++17 builds.
```
include/openPMD/backend/Attributable.hpp(437):
error #289: no instance of constructor "openPMD::Attribute::Attribute" matches the argument list
            argument types are: (std::__cxx11::string)
          detected during instantiation of "__nv_bool openPMD::AttributableInterface::setAttribute(const std::__cxx11::string &, T) [with T=std::__cxx11::string]"
```
from
```
inline bool
AttributableInterface::setAttribute( std::string const & key, char const value[] )
{
    return this->setAttribute(key, std::string(value));
}
```

Seen with:
- NVCC 11.0.2 + GCC 8.3.0
- NVCC 11.0.2 + GCC 7.5.0

* NVCC 11.0.2 C++17 work-around: Add Comment
  • Loading branch information
ax3l authored Sep 22, 2021
1 parent 5bf5bc7 commit 81fe373
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion include/openPMD/backend/Attributable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,12 @@ AttributableInterface::setAttribute( std::string const & key, T value )
&& !attri.m_attributes.key_comp()(key, it->first) )
{
// key already exists in map, just replace the value
it->second = Attribute(value);

// note: due to a C++17 issue with NVCC 11.0.2 we write the
// T value to variant conversion explicitly
// https://github.com/openPMD/openPMD-api/pull/1103
//it->second = Attribute(std::move(value));
it->second = Attribute(Attribute::resource(std::move(value)));
return true;
} else
{
Expand Down

0 comments on commit 81fe373

Please sign in to comment.