Skip to content

Commit

Permalink
[flang][msvc] Avoid templated initializer list initialization of vect…
Browse files Browse the repository at this point in the history
…or. NFC.

The Microsoft compiler emits an error when populating the vector with a single element of a templated argument using the brace syntax. The error is:
```
constant.h(102,1): error C2664: 'std::vector<Fortran::evaluate::value::Complex<...>, ...>::vector(std::initializer_list<_Ty>,const _Alloc &)': cannot convert argument 1 from 'initializer list' to 'std::initializer_list<_Ty>'
```
To work around this error, we replace the templated constructor with one for the expected type. Conversion to the element type has to be done by the caller.

This patch is part of the series to make flang compilable with MS Visual Studio <http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html>.

Reviewed By: klausler

Differential Revision: https://reviews.llvm.org/D88163
  • Loading branch information
Meinersbur committed Sep 29, 2020
1 parent 7bed95a commit d2d7a44
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions flang/include/flang/Evaluate/constant.h
Expand Up @@ -97,8 +97,7 @@ class ConstantBase : public ConstantBounds {

template <typename A>
ConstantBase(const A &x, Result res = Result{}) : result_{res}, values_{x} {}
template <typename A, typename = common::NoLvalue<A>>
ConstantBase(A &&x, Result res = Result{})
ConstantBase(ELEMENT &&x, Result res = Result{})
: result_{res}, values_{std::move(x)} {}
ConstantBase(
std::vector<Element> &&, ConstantSubscripts &&, Result = Result{});
Expand Down

0 comments on commit d2d7a44

Please sign in to comment.