diff options
author | Eric Fiselier <eric@efcs.ca> | 2017-02-17 01:17:10 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2017-02-17 01:17:10 +0000 |
commit | dd3ba794ef1077fb9c3635313327e93626b540dc (patch) | |
tree | 465fce003ddfd0cef82ff78e94a05ad36744c155 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | e43bffa7183407d252622ca5c5f64269cf7e2c14 (diff) | |
download | bcm5719-llvm-dd3ba794ef1077fb9c3635313327e93626b540dc.tar.gz bcm5719-llvm-dd3ba794ef1077fb9c3635313327e93626b540dc.zip |
[libc++] Fix PR 31938 - std::basic_string constructors use non-deductible parameter types.
Summary:
This patch fixes http://llvm.org/PR31938. The description below is copy/pasted from the bug:
The standard says:
template<class charT, class traits = char_traits<charT>,
class Allocator = allocator<charT>>
class basic_string {
using value_type = typename traits::char_type;
// ...
basic_string(const charT* s, const Allocator& a = Allocator());
};
libc++ actually chooses to declare the constructor as
basic_string(const value_type* s, const Allocator& a = Allocator());
The implicit deduction guides from class template argument deduction make what was previously an implementation detail visible:
std::basic_string s = "foo"; // error, can't deduce charT.
The constructor in question is in the libc++ DSO, but fortunately it looks like fixing this will not result in an ABI break.
@rsmith How does this look? I did more than just the constructors mentioned in the PR, but IDK how far to take it.
Reviewers: mclow.lists, rsmith
Reviewed By: rsmith
Subscribers: cfe-commits, rsmith
Differential Revision: https://reviews.llvm.org/D29863
llvm-svn: 295393
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
0 files changed, 0 insertions, 0 deletions