Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
e4e518f3
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
1 年多 前同步成功
通知
0
Star
18
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Harfbuzz
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e4e518f3
编写于
6月 07, 2019
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix build on gcc 4.8
Fixes
https://github.com/harfbuzz/harfbuzz/issues/1724
上级
3c240bd3
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
27 addition
and
2 deletion
+27
-2
src/hb-algs.hh
src/hb-algs.hh
+27
-2
未找到文件。
src/hb-algs.hh
浏览文件 @
e4e518f3
...
...
@@ -167,14 +167,39 @@ template <unsigned Pos=1, typename Appl, typename V>
auto
hb_partial
(
Appl
&&
a
,
V
&&
v
)
HB_AUTO_RETURN
((
hb_partial_t
<
Pos
,
Appl
,
V
>
(
a
,
v
)
))
/* The following hacky replacement version is to make Visual Stuiod build:. */
\
/* https://github.com/harfbuzz/harfbuzz/issues/1730 */
\
/* The following, HB_PARTIALIZE, macro uses a particular corner-case
* of C++11 that is not particularly well-supported by all compilers.
* What's happening is that it's using "this" in a trailing return-type
* via decltype(). Broken compilers deduce the type of "this" pointer
* in that context differently from what it resolves to in the body
* of the function.
*
* One probable cause of this is that at the time of trailing return
* type declaration, "this" points to an incomplete type, whereas in
* the function body the type is complete. That doesn't justify the
* error in any way, but is probably what's happening.
*
* In the case of MSVC, we get around this by using C++14 "decltype(auto)"
* which deduces the type from the actual return statement. For gcc 4.8
* we use "this+0" instead of "this" which produces an rvalue that seems
* to do be deduces as the same type with this particular compiler. Note
* that "this+0" is illegal in the trailing decltype position since at
* that point this points to incomplete type! But seems to do the trick.
*/
#ifdef _MSC_VER
/* https://github.com/harfbuzz/harfbuzz/issues/1730 */
\
#define HB_PARTIALIZE(Pos) \
template <typename _T> \
decltype(auto) operator () (_T&& _v) const \
{ return hb_partial<Pos> (this, hb_forward<_T> (_v))
;
}
\
static_assert
(
true
,
""
)
#elif defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ <= 8)
/* https://github.com/harfbuzz/harfbuzz/issues/1724 */
#define HB_PARTIALIZE(Pos) \
template <typename _T> \
auto operator () (_T&& _v) const HB_AUTO_RETURN \
(hb_partial<Pos> (this+0, hb_forward<_T> (_v))) \
static_assert (true, "")
#else
#define HB_PARTIALIZE(Pos) \
template <typename _T> \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录